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

Assertion `table->key_read == 0' fails in close_thread_table on EXPLAIN with GROUP BY and HAVING in EXISTS SQ, InnoDB

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Blocker
    • Resolution: Duplicate
    • Affects Version/s: 10.0.1, 5.5.29
    • Fix Version/s: 10.0.4, 5.5.32
    • Component/s: None
    • Labels:
      None

      Description

      mysqld: maria-5.5/sql/sql_base.cc:1604: bool close_thread_table(THD*, TABLE**): Assertion `table->key_read == 0' failed.
      130115  2:59:33 [ERROR] mysqld got signal 6 ;
      
      #6  0x00007fc574266d4d in __GI___assert_fail (assertion=0xd0e164 "table->key_read == 0", file=<optimized out>, line=1604, function=<optimized out>) at assert.c:81
      #7  0x00000000005acbd6 in close_thread_table (thd=0x352fa20, table_ptr=0x352fad8) at /maria-5.5/sql/sql_base.cc:1604
      #8  0x00000000005ac481 in close_open_tables (thd=0x352fa20) at /maria-5.5/sql/sql_base.cc:1377
      #9  0x00000000005acb0c in close_thread_tables (thd=0x352fa20) at /maria-5.5/sql/sql_base.cc:1589
      #10 0x0000000000614557 in mysql_execute_command (thd=0x352fa20) at /maria-5.5/sql/sql_parse.cc:4530
      #11 0x000000000061731d in mysql_parse (thd=0x352fa20, rawbuf=0x362d4b8 "EXPLAIN \nSELECT * FROM t1\nWHERE EXISTS ( SELECT b FROM t2, t3\nGROUP BY b\nHAVING b != 3 )", length=88, parser_state=0x7fc563b4b500) at /maria-5.5/sql/sql_parse.cc:5741
      #12 0x000000000060aade in dispatch_command (command=COM_QUERY, thd=0x352fa20, packet=0x36931a1 "", packet_length=89) at /maria-5.5/sql/sql_parse.cc:1055
      #13 0x0000000000609d95 in do_command (thd=0x352fa20) at /maria-5.5/sql/sql_parse.cc:794
      #14 0x000000000070d0a3 in do_handle_one_connection (thd_arg=0x352fa20) at /maria-5.5/sql/sql_connect.cc:1253
      #15 0x000000000070ca8e in handle_one_connection (arg=0x352fa20) at /maria-5.5/sql/sql_connect.cc:1168
      #16 0x0000000000b92d63 in pfs_spawn_thread (arg=0x3691f00) at /maria-5.5/storage/perfschema/pfs.cc:1015
      #17 0x00007fc574faaefc in start_thread (arg=0x7fc563b4c700) at pthread_create.c:304
      #18 0x00007fc57431cf4d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
      #19 0x0000000000000000 in ?? ()
      

      The failure appeared in maria/5.5 with the following revision:

      revno: 3511 [merge]
      revision-id: psergey@askmonty.org-20120828112037-16ga9yq0akyd0fzc
      committer: Sergey Petrunya <psergey@askmonty.org>
      timestamp: Tue 2012-08-28 15:20:37 +0400
      message:
        Merge
          ------------------------------------------------------------
          revno: 3501.1.1
          committer: Sergey Petrunya <psergey@askmonty.org>
          timestamp: Tue 2012-08-28 15:15:05 +0400
          message:
            MDEV-430: Server crashes in select_describe on EXPLAIN with materialization+semijoin, etc
            - Don't do early cleanup of uncorrelated subqueries if we're running an EXPLAIN.
      

      Test case:

      
      --source include/have_innodb.inc
      
      CREATE TABLE t1 (a INT) ENGINE=InnoDB;
      CREATE TABLE t2 (b INT PRIMARY KEY, c INT) ENGINE=InnoDB;
      CREATE TABLE t3 (d INT) ENGINE=InnoDB;
      
      EXPLAIN 
      SELECT * FROM t1
      WHERE EXISTS ( SELECT b FROM t2, t3
      GROUP BY b
      HAVING b != 3 );
      

      Minimal optimizer_switch: in_to_exists=on
      Full optimizer_switch (default):

      index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=off
      

      Not reproducible on MariaDB 5.3, MySQL 5.6.
      Not reproducible with MyISAM instead of InnoDB.
      Only EXPLAIN causes the failure, SELECT works.

        Gliffy Diagrams

          Attachments

            Issue Links

              Activity

              Hide
              elenst Elena Stepanova added a comment - - edited

              Assigned to Sergei Petrunia just because the failure started happening with his revision, please re-assign if needed.

              Show
              elenst Elena Stepanova added a comment - - edited Assigned to Sergei Petrunia just because the failure started happening with his revision, please re-assign if needed.
              Hide
              psergey Sergei Petrunia added a comment -

              This is a problem with join cleanup.

              SQL layer calls join->join_free() after execution.

              Regular SELECT will free the uncorrelated subquery as soon as it is executed.

              EXPLAIN must not free the subquery, we need to keep it so that we can print its
              query plan.

              This bug shows the problem: somehow, EXPLAIN fails to clean up subquery's
              join (which causes assert to fire at a later phase).

              Show
              psergey Sergei Petrunia added a comment - This is a problem with join cleanup. SQL layer calls join->join_free() after execution. Regular SELECT will free the uncorrelated subquery as soon as it is executed. EXPLAIN must not free the subquery, we need to keep it so that we can print its query plan. This bug shows the problem: somehow, EXPLAIN fails to clean up subquery's join (which causes assert to fire at a later phase).
              Hide
              psergey Sergei Petrunia added a comment -

              If the query worked, the output would be:

              ----------------------------------------------------------------------------------------------------------+

              id select_type table type possible_keys key key_len ref rows Extra

              ----------------------------------------------------------------------------------------------------------+

              1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
              2 SUBQUERY t2 index NULL PRIMARY 4 NULL 1 Using index; Using temporary; Using filesort
              2 SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join)

              ----------------------------------------------------------------------------------------------------------+

              Show
              psergey Sergei Petrunia added a comment - If the query worked, the output would be: ----- ----------- ----- ----- ------------- ------- ------- ---- ---- ---------------------------------------------+ id select_type table type possible_keys key key_len ref rows Extra ----- ----------- ----- ----- ------------- ------- ------- ---- ---- ---------------------------------------------+ 1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE 2 SUBQUERY t2 index NULL PRIMARY 4 NULL 1 Using index; Using temporary; Using filesort 2 SUBQUERY t3 ALL NULL NULL NULL NULL 1 Using join buffer (flat, BNL join) ----- ----------- ----- ----- ------------- ------- ------- ---- ---- ---------------------------------------------+
              Hide
              sanja Oleksandr Byelkin added a comment -

              unexplained (yet) fix

              Show
              sanja Oleksandr Byelkin added a comment - unexplained (yet) fix
              Hide
              sanja Oleksandr Byelkin added a comment -

              I reassign it because it is 99% duplicate of MDEV-4536. If it is not, please reassign it back.

              Show
              sanja Oleksandr Byelkin added a comment - I reassign it because it is 99% duplicate of MDEV-4536 . If it is not, please reassign it back.
              Hide
              psergey Sergei Petrunia added a comment -

              Duplicate of MDEV-4536

              Show
              psergey Sergei Petrunia added a comment - Duplicate of MDEV-4536

                People

                • Assignee:
                  psergey Sergei Petrunia
                  Reporter:
                  elenst Elena Stepanova
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  4 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: