From: Jorgen Loland Date: September 21 2010 9:26am Subject: bzr commit into mysql-next-mr-bugfixing branch (jorgen.loland:3206) WL#5581 List-Archive: http://lists.mysql.com/commits/118683 Message-Id: <20100921092641.3F31F72A@atum21.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5069452594481417716==" --===============5069452594481417716== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/jl208045/mysql/wl4800/mysql-next-mr-opt-backporting-wl4800-mtrtrace/ based on revid:guilhem@stripped 3206 Jorgen Loland 2010-09-21 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 modified: client/mysqltest.cc mysql-test/mysql-test-run.pl === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-08-16 07:30:40 +0000 +++ b/client/mysqltest.cc 2010-09-21 09:26:38 +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 *); @@ -6069,6 +6072,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, @@ -7547,6 +7554,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 @@ -7606,9 +7643,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); } @@ -7945,6 +7991,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'", @@ -7967,6 +8014,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) @@ -8196,6 +8244,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-21 09:26:38 +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 --===============5069452594481417716== 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\ # 2mj20imajo3eo82s # target_branch: file:///export/home/jl208045/mysql/wl4800/mysql-next-\ # mr-opt-backporting-wl4800-mtrtrace/ # testament_sha1: 61f046c1ee07543a4af126dacddff17806934989 # timestamp: 2010-09-21 11:26:41 +0200 # base_revision_id: guilhem@stripped # # Begin bundle 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 --===============5069452594481417716==--