From: Jorgen Loland Date: September 28 2010 9:16am Subject: bzr push into mysql-next-mr-bugfixing branch (jorgen.loland:3215 to 3216) WL#5581 List-Archive: http://lists.mysql.com/commits/119238 Message-Id: <20100928091626.93D701371@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0683187240570828026==" --===============0683187240570828026== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3216 Jorgen Loland 2010-09-28 WL#5581: "Add --opt-trace-protocol to MTR" Add a new opt-trace-protocol to mtr so that existing regression test suites can be used to test optimizer tracing. The opt-trace-protocol does this: 1) Enables optimizer tracing 2) Prints the optimizer trace for every statement eligible for tracing The statements eligible for tracing are: [EXPLAIN [EXTENDED]] SELECT INSERT DELETE UPDATE @ client/mysqltest.cc Added optimizer trace protocol @ mysql-test/mysql-test-run.pl Added optimizer trace protocol modified: client/mysqltest.cc mysql-test/mysql-test-run.pl 3215 Guilhem Bichot 2010-09-27 [merge] merge of latest next-mr-opt-backporting added: include/mysql/service_thd_wait.h include/mysql/service_thread_scheduler.h libservices/my_thread_scheduler_service.c libservices/thd_wait_service.c mysql-test/include/ctype_filesort2.inc mysql-test/include/have_binlog_rows_query.inc mysql-test/include/not_blackhole.inc mysql-test/include/rpl_assert.inc mysql-test/r/have_binlog_rows_query.require mysql-test/r/partition_not_blackhole.result mysql-test/std_data/parts/t1_blackhole.frm mysql-test/std_data/parts/t1_blackhole.par mysql-test/suite/perfschema/r/checksum.result mysql-test/suite/perfschema/t/checksum.test mysql-test/suite/rpl/r/rpl_row_ignorable_event.result mysql-test/suite/rpl/t/rpl_row_ignorable_event-master.opt mysql-test/suite/rpl/t/rpl_row_ignorable_event-slave.opt mysql-test/suite/rpl/t/rpl_row_ignorable_event.test mysql-test/suite/sys_vars/r/binlog_rows_query_log_events_basic.result mysql-test/suite/sys_vars/t/binlog_rows_query_log_events_basic.test mysql-test/t/partition_not_blackhole-master.opt mysql-test/t/partition_not_blackhole.test sql/sql_callback.h modified: client/mysqlbinlog.cc client/mysqldump.c client/mysqltest.cc cmake/dtrace.cmake dbug/dbug.c include/Makefile.am include/m_ctype.h include/mysql/plugin.h include/mysql/plugin_audit.h.pp include/mysql/plugin_ftparser.h.pp include/mysql/service_my_snprintf.h include/mysql/services.h include/service_versions.h include/thr_lock.h include/violite.h libmysqld/Makefile.am libmysqld/lib_sql.cc libservices/CMakeLists.txt libservices/HOWTO libservices/Makefile.am mysql-test/CMakeLists.txt mysql-test/collections/default.experimental mysql-test/extra/binlog_tests/binlog_insert_delayed.test mysql-test/extra/rpl_tests/create_recursive_construct.inc mysql-test/extra/rpl_tests/delayed_slave_wait_on_query.inc mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test mysql-test/include/default_mysqld.cnf mysql-test/include/mtr_warnings.sql mysql-test/include/range.inc mysql-test/include/show_binlog_events2.inc mysql-test/include/subquery_mat.inc mysql-test/include/subquery_sj.inc mysql-test/include/wait_for_slave_param.inc mysql-test/r/alter_table.result mysql-test/r/archive.result mysql-test/r/bootstrap.result mysql-test/r/create.result mysql-test/r/csv.result mysql-test/r/ctype_errors.result mysql-test/r/ctype_tis620.result mysql-test/r/ctype_ujis.result mysql-test/r/ctype_utf16.result mysql-test/r/ctype_utf32.result mysql-test/r/ctype_utf8.result mysql-test/r/ctype_utf8mb4.result mysql-test/r/ctype_utf8mb4_heap.result mysql-test/r/ctype_utf8mb4_innodb.result mysql-test/r/ctype_utf8mb4_myisam.result mysql-test/r/delete.result mysql-test/r/drop.result mysql-test/r/error_simulation.result mysql-test/r/explain.result mysql-test/r/func_gconcat.result mysql-test/r/func_group.result mysql-test/r/func_misc.result mysql-test/r/func_time.result mysql-test/r/gis-rtree.result mysql-test/r/grant.result mysql-test/r/handler_innodb.result mysql-test/r/handler_myisam.result mysql-test/r/key.result mysql-test/r/log_tables.result mysql-test/r/mdl_sync.result mysql-test/r/myisam-system.result mysql-test/r/myisam.result mysql-test/r/mysqld--help-notwin.result mysql-test/r/mysqld--help-win.result mysql-test/r/mysqldump.result mysql-test/r/optimizer_trace_no_prot.result mysql-test/r/optimizer_trace_ps_prot.result mysql-test/r/parser.result mysql-test/r/partition.result mysql-test/r/partition_disabled.result mysql-test/r/partition_error.result mysql-test/r/profiling.result mysql-test/r/ps.result mysql-test/r/ps_1general.result mysql-test/r/ps_ddl1.result mysql-test/r/range_all.result mysql-test/r/range_icp.result mysql-test/r/range_icp_mrr.result mysql-test/r/range_mrr.result mysql-test/r/range_none.result mysql-test/r/read_only.result mysql-test/r/rename.result mysql-test/r/select_all.result mysql-test/r/select_all_jcl6.result mysql-test/r/select_icp_mrr.result mysql-test/r/select_icp_mrr_jcl6.result mysql-test/r/select_none.result mysql-test/r/select_none_jcl6.result mysql-test/r/signal.result mysql-test/r/signal_demo2.result mysql-test/r/signal_demo3.result mysql-test/r/sp-dynamic.result mysql-test/r/sp-error.result mysql-test/r/sp-prelocking.result mysql-test/r/sp-vars.result mysql-test/r/sp.result mysql-test/r/strict.result mysql-test/r/subquery_mat.result mysql-test/r/subquery_mat_all.result mysql-test/r/subquery_mat_none.result mysql-test/r/subquery_sj_all.result mysql-test/r/subquery_sj_all_jcl6.result mysql-test/r/subquery_sj_all_jcl7.result mysql-test/r/subquery_sj_dupsweed.result mysql-test/r/subquery_sj_dupsweed_jcl6.result mysql-test/r/subquery_sj_dupsweed_jcl7.result mysql-test/r/subquery_sj_firstmatch.result mysql-test/r/subquery_sj_firstmatch_jcl6.result mysql-test/r/subquery_sj_firstmatch_jcl7.result mysql-test/r/subquery_sj_loosescan.result mysql-test/r/subquery_sj_loosescan_jcl6.result mysql-test/r/subquery_sj_loosescan_jcl7.result mysql-test/r/subquery_sj_mat.result mysql-test/r/subquery_sj_mat_jcl6.result mysql-test/r/subquery_sj_mat_jcl7.result mysql-test/r/subquery_sj_mat_nosj.result mysql-test/r/subquery_sj_none.result mysql-test/r/subquery_sj_none_jcl6.result mysql-test/r/subquery_sj_none_jcl7.result mysql-test/r/subselect_innodb.result mysql-test/r/temp_table.result mysql-test/r/truncate_coverage.result mysql-test/r/type_datetime.result mysql-test/r/type_newdecimal.result mysql-test/r/variables.result mysql-test/r/view.result mysql-test/r/warnings.result mysql-test/suite/binlog/r/binlog_row_binlog.result mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result mysql-test/suite/binlog/r/binlog_stm_binlog.result mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result mysql-test/suite/binlog/r/binlog_unsafe.result mysql-test/suite/binlog/t/binlog_incident.test mysql-test/suite/binlog/t/binlog_unsafe.test mysql-test/suite/federated/federated.result mysql-test/suite/federated/federated_server.result mysql-test/suite/funcs_1/r/innodb_trig_0102.result mysql-test/suite/funcs_1/r/innodb_views.result mysql-test/suite/funcs_1/r/memory_trig_0102.result mysql-test/suite/funcs_1/r/memory_views.result mysql-test/suite/funcs_1/r/myisam_trig_0102.result mysql-test/suite/funcs_1/r/myisam_views.result mysql-test/suite/funcs_1/r/storedproc.result mysql-test/suite/innodb/r/innodb-autoinc.result mysql-test/suite/innodb/r/innodb.result mysql-test/suite/innodb/r/innodb_mysql.result mysql-test/suite/innodb/t/innodb_mysql.test mysql-test/suite/parts/r/part_ctype_utf32.result mysql-test/suite/perfschema/include/upgrade_check.inc mysql-test/suite/perfschema/r/privilege_table_io.result mysql-test/suite/perfschema/r/server_init.result mysql-test/suite/perfschema/r/start_server_no_cond_class.result mysql-test/suite/perfschema/r/start_server_no_cond_inst.result mysql-test/suite/perfschema/r/start_server_no_file_class.result mysql-test/suite/perfschema/r/start_server_no_file_inst.result mysql-test/suite/perfschema/r/start_server_no_mutex_class.result mysql-test/suite/perfschema/r/start_server_no_mutex_inst.result mysql-test/suite/perfschema/r/start_server_no_rwlock_class.result mysql-test/suite/perfschema/r/start_server_no_rwlock_inst.result mysql-test/suite/perfschema/r/start_server_no_table_hdl.result mysql-test/suite/perfschema/r/start_server_no_table_inst.result mysql-test/suite/perfschema/r/start_server_no_thread_class.result mysql-test/suite/perfschema/r/start_server_no_thread_inst.result mysql-test/suite/perfschema/r/start_server_off.result mysql-test/suite/perfschema/r/start_server_on.result mysql-test/suite/perfschema/t/privilege_table_io.test mysql-test/suite/perfschema/t/server_init.test mysql-test/suite/rpl/r/rpl000013.result mysql-test/suite/rpl/r/rpl_delayed_slave.result mysql-test/suite/rpl/r/rpl_drop.result mysql-test/suite/rpl/r/rpl_drop_temp.result mysql-test/suite/rpl/r/rpl_drop_view.result mysql-test/suite/rpl/r/rpl_extraCol_innodb.result mysql-test/suite/rpl/r/rpl_extraCol_myisam.result mysql-test/suite/rpl/r/rpl_flush_logs.result mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result mysql-test/suite/rpl/r/rpl_multi_update3.result mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_row_colSize.result mysql-test/suite/rpl/r/rpl_row_conflicts.result mysql-test/suite/rpl/r/rpl_row_drop_create_temp_table.result mysql-test/suite/rpl/r/rpl_row_implicit_commit_binlog.result mysql-test/suite/rpl/r/rpl_session_var.result mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result mysql-test/suite/rpl/r/rpl_stm_drop_create_temp_table.result mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result mysql-test/suite/rpl/r/rpl_stm_no_op.result mysql-test/suite/rpl/r/rpl_stm_until.result mysql-test/suite/rpl/r/rpl_temp_table.result mysql-test/suite/rpl/t/disabled.def mysql-test/suite/rpl/t/rpl_delayed_slave.test mysql-test/suite/rpl/t/rpl_drop.test mysql-test/suite/rpl/t/rpl_flush_logs.test mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size-master.opt mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size-master.opt mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size-master.opt mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result mysql-test/suite/sys_vars/r/max_binlog_cache_size_basic.result mysql-test/suite/sys_vars/r/slow_query_log_func.result mysql-test/suite/sys_vars/r/sql_notes_func.result mysql-test/suite/sys_vars/t/max_binlog_cache_size_basic.test mysql-test/t/ctype_utf16.test mysql-test/t/ctype_utf32.test mysql-test/t/ctype_utf8mb4.test mysql-test/t/delete.test mysql-test/t/disabled.def mysql-test/t/drop.test mysql-test/t/explain.test mysql-test/t/func_gconcat.test mysql-test/t/func_group.test mysql-test/t/func_misc.test mysql-test/t/func_time.test mysql-test/t/strict.test mysql-test/t/subquery_sj_firstmatch.test mysql-test/t/subselect_innodb.test mysql-test/t/type_datetime.test mysql-test/t/variables.test mysql-test/valgrind.supp mysys/my_gethwaddr.c mysys/my_getopt.c mysys/my_init.c mysys/my_sync.c mysys/thr_lock.c packaging/WiX/mysql_server.wxs.in sql/CMakeLists.txt sql/authors.h sql/binlog.cc sql/binlog.h sql/derror.cc sql/ha_partition.cc sql/handler.cc sql/item.cc sql/item.h sql/item_func.cc sql/item_subselect.cc sql/item_subselect.h sql/item_sum.cc sql/item_sum.h sql/item_timefunc.cc sql/item_timefunc.h sql/log.cc sql/log_event.cc sql/log_event.h sql/mysqld.cc sql/mysqld.h sql/opt_range.cc sql/rpl_injector.cc sql/rpl_master.cc sql/rpl_rli.cc sql/rpl_rli.h sql/rpl_slave.cc sql/scheduler.cc sql/scheduler.h sql/set_var.cc sql/set_var.h sql/share/errmsg-utf8.txt sql/sql_admin.cc sql/sql_base.cc sql/sql_binlog.cc sql/sql_class.cc sql/sql_class.h sql/sql_connect.cc sql/sql_connect.h sql/sql_insert.cc sql/sql_lex.h sql/sql_plugin.cc sql/sql_plugin_services.h sql/sql_select.cc sql/sql_select.h sql/sql_show.cc sql/sql_table.cc sql/sql_view.cc sql/sql_yacc.yy sql/sys_vars.cc sql/sys_vars.h sql/table.h storage/innobase/buf/buf0flu.c storage/innobase/buf/buf0rea.c storage/innobase/srv/srv0srv.c storage/myisam/mi_rprev.c storage/perfschema/ha_perfschema.cc storage/perfschema/pfs_engine_table.cc storage/perfschema/table_events_waits.cc storage/perfschema/table_events_waits.h strings/ctype-ucs2.c strings/ctype-utf8.c strings/my_vsnprintf.c unittest/mysys/my_vsnprintf-t.c vio/vio.c vio/vio_priv.h vio/viosocket.c vio/viossl.c === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-09-08 07:10:51 +0000 +++ b/client/mysqltest.cc 2010-09-28 08:58:16 +0000 @@ -87,7 +87,7 @@ enum { OPT_PS_PROTOCOL=OPT_MAX_CLIENT_OPTION, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL, OPT_MAX_CONNECT_RETRIES, OPT_MAX_CONNECTIONS, OPT_MARK_PROGRESS, OPT_LOG_DIR, - OPT_TAIL_LINES, OPT_RESULT_FORMAT_VERSION + OPT_TAIL_LINES, OPT_RESULT_FORMAT_VERSION, OPT_TRACE_PROTOCOL }; static int record= 0, opt_sleep= -1; @@ -107,6 +107,7 @@ static my_bool opt_mark_progress= 0; static my_bool ps_protocol= 0, ps_protocol_enabled= 0; static my_bool sp_protocol= 0, sp_protocol_enabled= 0; static my_bool view_protocol= 0, view_protocol_enabled= 0; +static my_bool opt_trace_protocol= 0, opt_trace_protocol_enabled= 0; static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0; static my_bool parsing_disabled= 0; static my_bool display_result_vertically= FALSE, display_result_lower= FALSE, @@ -194,6 +195,8 @@ static ulong connection_retry_sleep= 100 static my_regex_t ps_re; /* the query can be run using PS protocol */ static my_regex_t sp_re; /* the query can be run as a SP */ static my_regex_t view_re; /* the query can be run as a view*/ +/* the query can be traced with optimizer trace*/ +static my_regex_t opt_trace_re; static void init_re(void); static int match_re(my_regex_t *, char *); @@ -6158,6 +6161,10 @@ static struct my_option my_long_options[ {"view-protocol", OPT_VIEW_PROTOCOL, "Use views for select.", &view_protocol, &view_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"opt-trace-protocol", OPT_TRACE_PROTOCOL, + "Trace DML statements with optimizer trace", + &opt_trace_protocol, &opt_trace_protocol, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"connect_timeout", OPT_CONNECT_TIMEOUT, "Number of seconds before connection timeout.", &opt_connect_timeout, &opt_connect_timeout, 0, GET_UINT, REQUIRED_ARG, @@ -7630,6 +7637,36 @@ void run_query(struct st_connection *cn, DBUG_VOID_RETURN; } +/** + Display the optimizer trace produced by the last executed statement. + */ +void display_opt_trace(struct st_connection *cn, + struct st_command *command, + int flags) +{ + if (!disable_query_log && + opt_trace_protocol_enabled && + !command->expected_errors.count && + match_re(&opt_trace_re, command->query)) + { + st_command save_command= *command; + DYNAMIC_STRING query_str; + init_dynamic_string(&query_str, + "SELECT trace FROM information_schema.optimizer_trace " + "/* injected by --opt-trace-mode */", + 128, 128); + + command->query= query_str.str; + command->query_len= query_str.length; + command->end= strend(command->query); + + run_query(cn, command, flags); + + dynstr_free(&query_str); + *command= save_command; + } +} + /****************************************************************************/ /* Functions to detect different SQL statements @@ -7689,9 +7726,18 @@ void init_re(void) "^(" "[[:space:]]*SELECT[[:space:]])"; + const char *opt_trace_re_str = + "^(" + "[[:space:]]*INSERT[[:space:]]|" + "[[:space:]]*UPDATE[[:space:]]|" + "[[:space:]]*DELETE[[:space:]]|" + "[[:space:]]*EXPLAIN[[:space:]]|" + "[[:space:]]*SELECT[[:space:]])"; + init_re_comp(&ps_re, ps_re_str); init_re_comp(&sp_re, sp_re_str); init_re_comp(&view_re, view_re_str); + init_re_comp(&opt_trace_re, opt_trace_re_str); } @@ -8028,6 +8074,7 @@ int main(int argc, char **argv) var_set_int("$PS_PROTOCOL", ps_protocol); var_set_int("$SP_PROTOCOL", sp_protocol); var_set_int("$VIEW_PROTOCOL", view_protocol); + var_set_int("$OPT_TRACE_PROTOCOL", opt_trace_protocol); var_set_int("$CURSOR_PROTOCOL", cursor_protocol); DBUG_PRINT("info",("result_file: '%s'", @@ -8050,6 +8097,7 @@ int main(int argc, char **argv) ps_protocol_enabled= ps_protocol; sp_protocol_enabled= sp_protocol; view_protocol_enabled= view_protocol; + opt_trace_protocol_enabled= opt_trace_protocol; cursor_protocol_enabled= cursor_protocol; /* Cursor protcol implies ps protocol */ if (cursor_protocol_enabled) @@ -8282,6 +8330,7 @@ int main(int argc, char **argv) save_file[0]= 0; } run_query(cur_con, command, flags); + display_opt_trace(cur_con, command, flags); command_executed++; command->last_argument= command->end; === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-09-03 20:49:28 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-09-28 08:58:16 +0000 @@ -171,6 +171,7 @@ my $opt_ps_protocol; my $opt_sp_protocol; my $opt_cursor_protocol; my $opt_view_protocol; +my $opt_trace_protocol; our $opt_debug; our @opt_cases; # The test cases names in argv @@ -843,6 +844,7 @@ sub command_line_setup { 'ps-protocol' => \$opt_ps_protocol, 'sp-protocol' => \$opt_sp_protocol, 'view-protocol' => \$opt_view_protocol, + 'opt-trace-protocol' => \$opt_trace_protocol, 'cursor-protocol' => \$opt_cursor_protocol, 'ssl|with-openssl' => \$opt_ssl, 'skip-ssl' => \$opt_skip_ssl, @@ -1441,6 +1443,11 @@ sub command_line_setup { unless @valgrind_args; } + if ( $opt_trace_protocol ) + { + push(@opt_extra_mysqld_opt, "--optimizer_trace=enabled=on,one_line=off"); + } + if ( $opt_valgrind ) { # Set valgrind_options to default unless already defined @@ -5029,6 +5036,11 @@ sub start_mysqltest ($) { mtr_add_arg($args, "--view-protocol"); } + if ( $opt_trace_protocol ) + { + mtr_add_arg($args, "--opt-trace-protocol"); + } + if ( $opt_cursor_protocol ) { mtr_add_arg($args, "--cursor-protocol"); @@ -5450,6 +5462,7 @@ Options to control what engine/variation cursor-protocol Use the cursor protocol between client and server (implies --ps-protocol) view-protocol Create a view to execute all non updating queries + opt-trace-protocol Print optimizer trace sp-protocol Create a stored procedure to execute all queries compress Use the compressed protocol between client and server ssl Use ssl protocol between client and server --===============0683187240570828026== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jorgen.loland@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jorgen.loland@stripped\ # exj41towenor8rux # target_branch: file:///export/home/jl208045/mysql/wl4800/mysql-next-\ # mr-opt-backporting-wl4800-mtrtrace/ # testament_sha1: 8a347b396590b9e6ff113c7d767eb5c79a200727 # timestamp: 2010-09-28 11:16:26 +0200 # base_revision_id: guilhem@stripped # # Begin bundle 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 --===============0683187240570828026==--