Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-5117

Explain for a query executed as a PS is not written into the slow log

Details

    • Bug
    • Status: Closed (View Workflow)
    • Minor
    • Resolution: Fixed
    • None
    • 10.0.5
    • None
    • None

    Description

      I'm not sure if it should be, but even if not, it's good to have it for the record as "not a bug"

      When a query, e.g. a SELECT, is executed via a PS, it's written into the slow log as a query, but explain is not there.

      let $datadir = `select @@datadir`;
       
      prepare stmt from "select sleep(1)";
      set global slow_query_log = 1;
      set long_query_time = 0.000001;
      set log_slow_verbosity = 'explain';
       
      execute stmt;
       
      cat_file $datadir/../mysqld-slow.log;

      Time                 Id Command    Argument
      # Time: 131009 20:26:04
      # User@Host: root[root] @ localhost []
      # Thread_id: 3  Schema: test  QC_hit: No
      # Query_time: 0.000262  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 0
      use test;
      SET timestamp=1381335964;
      set long_query_time = 0.000001;
      # User@Host: root[root] @ localhost []
      # Thread_id: 3  Schema: test  QC_hit: No
      # Query_time: 0.000324  Lock_time: 0.000000  Rows_sent: 0  Rows_examined: 0
      SET timestamp=1381335964;
      set log_slow_verbosity = 'explain';
      # Time: 131009 20:26:05
      # User@Host: root[root] @ localhost []
      # Thread_id: 3  Schema: test  QC_hit: No
      # Query_time: 1.001381  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 0
      SET timestamp=1381335965;
      select sleep(1);

      bzr version-info
      revision-id: psergey@askmonty.org-20131009090746-6zfqg47elbhnquac
      revno: 3715
      branch-nick: 10.0-base-explain-slowquerylog

      Attachments

        Issue Links

          Activity

            elenst Elena Stepanova created issue -
            elenst Elena Stepanova made changes -
            Field Original Value New Value
            elenst Elena Stepanova made changes -

            This happens because EXECUTE command and the statement it is executing have
            different LEX objects.

            === 1. EXECUTE creates its EXPLAIN data ===
            Breakpoint 8, create_explain_query (lex=0xa615558, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917
            (gdb) wher
            #0 create_explain_query (lex=0xa615558, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917
            #1 0x00000000006188f4 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2204
            #2 0x0000000000622961 in mysql_parse (thd=0xa6120a0, rawbuf=0x7fff300077b8 "execute stmt", length=12, parser_state=0x7fff605ae680) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:6019

            (gdb) p lex->explain
            $81 = (Explain_query *) 0x7fff30007850
            (gdb) p lex->explain->have_query_plan()
            $82 = false
            (gdb) p lex
            $83 = (LEX *) 0xa615558

            === 2. The Statement creates its own EXPLAIN data ===
            (note that it has its own LEX)
            #0 create_explain_query (lex=0x7fff300350b0, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917
            #1 0x00000000006188f4 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2204
            #2 0x000000000063a26f in Prepared_statement::execute (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3913
            #3 0x00000000006393da in Prepared_statement::execute_loop (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false, packet=0x0, packet_end=0x0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3572

            (gdb) p lex->explain
            $84 = (Explain_query *) 0x7fff30007920
            (gdb) p lex
            $85 = (st_lex_local *) 0x7fff300350b0

            === 3. The Statement deletes its EXPLAIN data ===
            Breakpoint 6, delete_explain_query (lex=0x7fff300350b0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:910
            (gdb) wher
            #0 delete_explain_query (lex=0x7fff300350b0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:910
            #1 0x000000000063a323 in Prepared_statement::execute (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3935
            #2 0x00000000006393da in Prepared_statement::execute_loop (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false, packet=0x0, packet_end=0x0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3572
            #3 0x00000000006375a9 in mysql_sql_stmt_execute (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:2738
            #4 0x0000000000618c96 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2305

            === 4. EXECUTE command is in log_slow_statement. It has its EXPLAIN, but it's empty ===
            (gdb) wher
            #0 log_slow_statement (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:1546
            #1 0x0000000000617464 in dispatch_command (command=COM_QUERY, thd=0xa6120a0, packet=0xa616d51 "", packet_length=12) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:1495
            #2 0x00000000006154df in do_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:812
            #3 0x00000000007276a2 in do_handle_one_connection (thd_arg=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_connect.cc:1266
            #4 0x0000000000727410 in handle_one_connection (arg=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_connect.cc:1181
            #5 0x0000003509c07d90 in start_thread (arg=0x7fff605af700) at pthread_create.c:309
            #6 0x00000035098f0f5d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115
            (gdb) p thd
            $87 = (THD *) 0xa6120a0
            (gdb) p thd->lex
            $88 = (LEX *) 0xa615558
            (gdb) p thd->lex->explain
            $89 = (Explain_query *) 0x7fff30007850
            (gdb) p thd->lex->explain->have_query_plan()
            $90 = false

            psergei Sergei Petrunia added a comment - This happens because EXECUTE command and the statement it is executing have different LEX objects. === 1. EXECUTE creates its EXPLAIN data === Breakpoint 8, create_explain_query (lex=0xa615558, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917 (gdb) wher #0 create_explain_query (lex=0xa615558, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917 #1 0x00000000006188f4 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2204 #2 0x0000000000622961 in mysql_parse (thd=0xa6120a0, rawbuf=0x7fff300077b8 "execute stmt", length=12, parser_state=0x7fff605ae680) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:6019 (gdb) p lex->explain $81 = (Explain_query *) 0x7fff30007850 (gdb) p lex->explain->have_query_plan() $82 = false (gdb) p lex $83 = (LEX *) 0xa615558 === 2. The Statement creates its own EXPLAIN data === (note that it has its own LEX) #0 create_explain_query (lex=0x7fff300350b0, mem_root=0xa6168e0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:917 #1 0x00000000006188f4 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2204 #2 0x000000000063a26f in Prepared_statement::execute (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3913 #3 0x00000000006393da in Prepared_statement::execute_loop (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false, packet=0x0, packet_end=0x0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3572 (gdb) p lex->explain $84 = (Explain_query *) 0x7fff30007920 (gdb) p lex $85 = (st_lex_local *) 0x7fff300350b0 === 3. The Statement deletes its EXPLAIN data === Breakpoint 6, delete_explain_query (lex=0x7fff300350b0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:910 (gdb) wher #0 delete_explain_query (lex=0x7fff300350b0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_explain.cc:910 #1 0x000000000063a323 in Prepared_statement::execute (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3935 #2 0x00000000006393da in Prepared_statement::execute_loop (this=0x7fff30015520, expanded_query=0x7fff605adc20, open_cursor=false, packet=0x0, packet_end=0x0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:3572 #3 0x00000000006375a9 in mysql_sql_stmt_execute (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_prepare.cc:2738 #4 0x0000000000618c96 in mysql_execute_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:2305 === 4. EXECUTE command is in log_slow_statement. It has its EXPLAIN, but it's empty === (gdb) wher #0 log_slow_statement (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:1546 #1 0x0000000000617464 in dispatch_command (command=COM_QUERY, thd=0xa6120a0, packet=0xa616d51 "", packet_length=12) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:1495 #2 0x00000000006154df in do_command (thd=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_parse.cc:812 #3 0x00000000007276a2 in do_handle_one_connection (thd_arg=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_connect.cc:1266 #4 0x0000000000727410 in handle_one_connection (arg=0xa6120a0) at /home/psergey/dev2/10.0-base-explain-slowquerylog/sql/sql_connect.cc:1181 #5 0x0000003509c07d90 in start_thread (arg=0x7fff605af700) at pthread_create.c:309 #6 0x00000035098f0f5d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 (gdb) p thd $87 = (THD *) 0xa6120a0 (gdb) p thd->lex $88 = (LEX *) 0xa615558 (gdb) p thd->lex->explain $89 = (Explain_query *) 0x7fff30007850 (gdb) p thd->lex->explain->have_query_plan() $90 = false

            Note: log_slow_verbosity = 'query_plan' doesn't have such problem. Details like

            1. Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No
            2. Filesort: No Filesort_on_disk: No Merge_passes: 0

            are still printed into slow log for EXECUTE.

            psergei Sergei Petrunia added a comment - Note: log_slow_verbosity = 'query_plan' doesn't have such problem. Details like Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No Filesort: No Filesort_on_disk: No Merge_passes: 0 are still printed into slow log for EXECUTE.
            psergei Sergei Petrunia made changes -
            Resolution Fixed [ 1 ]
            Status Open [ 1 ] Closed [ 6 ]
            serg Sergei Golubchik made changes -
            Workflow defaullt [ 29243 ] MariaDB v2 [ 44469 ]
            ratzpo Rasmus Johansson (Inactive) made changes -
            Workflow MariaDB v2 [ 44469 ] MariaDB v3 [ 61577 ]
            serg Sergei Golubchik made changes -
            Workflow MariaDB v3 [ 61577 ] MariaDB v4 [ 147110 ]

            People

              psergei Sergei Petrunia
              elenst Elena Stepanova
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Git Integration

                  Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.