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

Server crash (Sig 11) in pushdown_cond_for_derived

    XMLWordPrintable

Details

    • Bug
    • Status: Confirmed (View Workflow)
    • Critical
    • Resolution: Unresolved
    • 11.8, 12.2(EOL), 12.2.2
    • 11.8, 12.3
    • Prepared Statements

    Description

      I encountered a server crash (Signal 11) on MariaDB 12.2.2.

      How to repeat:

      SET SESSION sql_mode='';
      SET SESSION optimizer_switch='index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,duplicateweedout=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=on,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on,split_materialized=on,condition_pushdown_for_subquery=on,rowid_filter=on,condition_pushdown_from_having=on,not_null_range_scan=off,hash_join_cardinality=on,cset_narrowing=on,sargable_casefold=on';
       
      DROP TABLE IF EXISTS `t0`;
      CREATE TABLE `t0` ( `c0` float unsigned zerofill DEFAULT NULL ) CHARSET=utf8mb4;
      INSERT INTO `t0` VALUES (NULL),(NULL),(NULL),(NULL),(000131551000);
       
      DROP TABLE IF EXISTS `t1`;
      CREATE TABLE `t1` ( `c0` bigint NOT NULL, PRIMARY KEY (`c0`) ) CHARSET=utf8mb4;
      INSERT INTO `t1` VALUES (0),(1),(578736225);
       
      ANALYZE TABLE `t0`, `t1`;
       
      PREPARE stmt1 FROM "SELECT `t_derived_0`.`ref0` AS `ref0` FROM (SELECT DISTINCT (-(((-(((`t0`.`c0`) IN (0.7789219850278478)) OR (EXISTS(SELECT 1 AS `1`))))) OR (CAST(`t0`.`c0` AS SIGNED)))) AS `ref0` FROM `t0` AS `t0`, `t1` AS `t1` GROUP BY 0.14607308465245217) AS `t_derived_0` INTERSECT ALL SELECT t_filter_sub_0.ref0 AS `ref0` FROM ((SELECT ref0 AS ref0 FROM (SELECT t_filter_sub_0.ref0 AS ref0 FROM (SELECT `t_filter_sub_0`.`ref0` AS `ref0` FROM (SELECT DISTINCT (-(((-(((`t0`.`c0`) IN (0.7789219850278478)) OR (EXISTS(SELECT 1 AS `1`))))) OR (CAST(`t0`.`c0` AS SIGNED)))) AS `ref0` FROM `t0` AS `t0`, `t1` AS `t1` GROUP BY 0.14607308465245217) AS `t_filter_sub_0` WHERE TRUE) AS `t_filter_sub_0` UNION ALL SELECT t_filter_sub_1.ref0 AS ref0 FROM (SELECT * FROM (SELECT `t_filter_sub_0`.`ref0` AS `ref0` FROM (SELECT DISTINCT (-(((-(((`t0`.`c0`) IN (0.7789219850278478)) OR (EXISTS(SELECT 1 AS `1`))))) OR (CAST(`t0`.`c0` AS SIGNED)))) AS `ref0` FROM `t0` AS `t0`, `t1` AS `t1` GROUP BY 0.14607308465245217) AS `t_filter_sub_0` WHERE TRUE) AS t_filter_sub_1 WHERE IFNULL(CAST((CAST(t_filter_sub_1.ref0 AS DECIMAL(65, 30)) - CAST(t_filter_sub_1.ref0 AS DECIMAL(65, 30))) AS CHAR), CAST((t_filter_sub_1.ref0 <= t_filter_sub_1.ref0) AS CHAR)) IN (t_filter_sub_1.ref0, CURRENT_USER())) AS t_filter_sub_1) AS t_branch EXCEPT ALL SELECT t_filter_sub_2.ref0 AS ref0 FROM (SELECT * FROM (SELECT `t_filter_sub_0`.`ref0` AS `ref0` FROM (SELECT DISTINCT (-(((-(((`t0`.`c0`) IN (0.7789219850278478)) OR (EXISTS(SELECT 1 AS `1`))))) OR (CAST(`t0`.`c0` AS SIGNED)))) AS `ref0` FROM `t0` AS `t0`, `t1` AS `t1` GROUP BY 0.14607308465245217) AS `t_filter_sub_0` WHERE TRUE) AS t_filter_sub_2 WHERE IFNULL(CAST((CAST(t_filter_sub_2.ref0 AS DECIMAL(65, 30)) - CAST(t_filter_sub_2.ref0 AS DECIMAL(65, 30))) AS CHAR), CAST((t_filter_sub_2.ref0 <= t_filter_sub_2.ref0) AS CHAR)) IN (t_filter_sub_2.ref0, CURRENT_USER())) AS t_filter_sub_2)) AS t_filter_sub_0";
       
      EXECUTE stmt1;
      
      

      Docker log:

      Thread pointer: 0x71b5dc000c68
      stack_bottom = 0x71b614151000 thread_stack 0x49000
      Printing to addr2line failed
      mariadbd(my_print_stacktrace+0x30)[0x636888be1960]
      mariadbd(handle_fatal_signal+0x1f3)[0x63688872d843]
      /lib/x86_64-linux-gnu/libc.so.6(+0x45330)[0x71b62af7c330]
      mariadbd(_ZN8Item_ref9transformEP3THDM4ItemFPS2_S1_PhES4_+0x2f)[0x6368887631cf]
      mariadbd(_ZN8Item_ref9transformEP3THDM4ItemFPS2_S1_PhES4_+0x3b)[0x6368887631db]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_ZN8Item_ref9transformEP3THDM4ItemFPS2_S1_PhES4_+0x3b)[0x6368887631db]
      mariadbd(_ZN9Item_func9transformEP3THDM4ItemFPS2_S1_PhES4_+0x12d)[0x6368887b968d]
      mariadbd(_Z25pushdown_cond_for_derivedP3THDP4ItemP10TABLE_LIST+0x289)[0x6368883acf99]
      mariadbd(_ZN4JOIN14optimize_innerEv+0xf14)[0x63688845c0f4]
      mariadbd(_ZN4JOIN8optimizeEv+0x103)[0x63688845cb93]
      mariadbd(_ZN18st_select_lex_unit8optimizeEv+0x3c2)[0x636888523602]
      mariadbd(+0x846d00)[0x6368883b4d00]
      mariadbd(_Z27mysql_handle_single_derivedP3LEXP10TABLE_LISTj+0xa3)[0x6368883a3fe3]
      mariadbd(_ZN4JOIN14optimize_innerEv+0xf34)[0x63688845c114]
      mariadbd(_ZN4JOIN8optimizeEv+0x103)[0x63688845cb93]
      mariadbd(_ZN18st_select_lex_unit8optimizeEv+0x3c2)[0x636888523602]
      mariadbd(+0x846d00)[0x6368883b4d00]
      mariadbd(_Z27mysql_handle_single_derivedP3LEXP10TABLE_LISTj+0xa3)[0x6368883a3fe3]
      mariadbd(_ZN4JOIN14optimize_innerEv+0xf34)[0x63688845c114]
      mariadbd(_ZN4JOIN8optimizeEv+0x103)[0x63688845cb93]
      mariadbd(_ZN18st_select_lex_unit8optimizeEv+0x3c2)[0x636888523602]
      mariadbd(_ZN18st_select_lex_unit10exec_innerEv+0x78)[0x63688852ba38]
      mariadbd(_Z13handle_selectP3THDP3LEXP13select_resulty+0x208)[0x63688845d8b8]
      mariadbd(+0x891ea1)[0x6368883ffea1]
      mariadbd(_Z21mysql_execute_commandP3THDb+0x37ca)[0x63688840ae1a]
      mariadbd(_ZN18Prepared_statement7executeEP6Stringb+0xa5d)[0x636888442ead]
      mariadbd(_ZN18Prepared_statement12execute_loopEP6StringbPhS2_+0xf1)[0x6368884430a1]
      mariadbd(_Z22mysql_sql_stmt_executeP3THD+0x1cf)[0x63688843094f]
      mariadbd(_Z21mysql_execute_commandP3THDb+0x1cb0)[0x636888409300]
      mariadbd(_Z11mysql_parseP3THDPcjP12Parser_state+0x19a)[0x636888415aea]
      mariadbd(_Z16dispatch_command19enum_server_commandP3THDPcjb+0x1304)[0x636888405b14]
      mariadbd(_Z10do_commandP3THDb+0x199)[0x636888406de9]
      mariadbd(_Z24do_handle_one_connectionP7CONNECTb+0x6b3)[0x6368885aad83]
      mariadbd(handle_one_connection+0x71)[0x636888593161]
      mariadbd(+0xdfa91e)[0x63688896891e]
      /lib/x86_64-linux-gnu/libc.so.6(+0x9caa4)[0x71b62afd3aa4]
      /lib/x86_64-linux-gnu/libc.so.6(__clone+0x44)[0x71b62b060a64]
      

      EDITS:
      Pretty-printing the query:

      SELECT
        `t_derived_0`.`ref0` AS `ref0`
      FROM
        (
          SELECT DISTINCT
            -(
              (
                -(
                  (
                    (`t0`.`c0`) IN (0.7789219850278478)
                  )
                  OR (
                    EXISTS(
                      SELECT
                        1 AS `1`
                    )
                  )
                )
              )
              OR (CAST(`t0`.`c0` AS SIGNED))
            ) AS `ref0`
          FROM
            `t0` AS `t0`,
            `t1` AS `t1`
          GROUP BY
            0.14607308465245217
        ) AS `t_derived_0`
      INTERSECT ALL
      SELECT
        t_filter_sub_0.ref0 AS `ref0`
      FROM
        (
          (
            SELECT
              ref0 AS ref0
            FROM
              (
                SELECT
                  t_filter_sub_0.ref0 AS ref0
                FROM
                  (
                    SELECT
                      `t_filter_sub_0`.`ref0` AS `ref0`
                    FROM
                      (
                        SELECT DISTINCT
                          -(
                            (
                              -(
                                (
                                  (`t0`.`c0`) IN (0.7789219850278478)
                                )
                                OR (
                                  EXISTS(
                                    SELECT
                                      1 AS `1`
                                  )
                                )
                              )
                            )
                            OR (CAST(`t0`.`c0` AS SIGNED))
                          ) AS `ref0`
                        FROM
                          `t0` AS `t0`,
                          `t1` AS `t1`
                        GROUP BY
                          0.14607308465245217
                      ) AS `t_filter_sub_0`
                    WHERE
                      TRUE
                  ) AS `t_filter_sub_0`
                UNION ALL
                SELECT
                  t_filter_sub_1.ref0 AS ref0
                FROM
                  (
                    SELECT
                      *
                    FROM
                      (
                        SELECT
                          `t_filter_sub_0`.`ref0` AS `ref0`
                        FROM
                          (
                            SELECT DISTINCT
                              -(
                                (
                                  -(
                                    (
                                      (`t0`.`c0`) IN (0.7789219850278478)
                                    )
                                    OR (
                                      EXISTS(
                                        SELECT
                                          1 AS `1`
                                      )
                                    )
                                  )
                                )
                                OR (CAST(`t0`.`c0` AS SIGNED))
                              ) AS `ref0`
                            FROM
                              `t0` AS `t0`,
                              `t1` AS `t1`
                            GROUP BY
                              0.14607308465245217
                          ) AS `t_filter_sub_0`
                        WHERE
                          TRUE
                      ) AS t_filter_sub_1
                    WHERE
                      IFNULL(
                        CAST(
                          (
                            CAST(t_filter_sub_1.ref0 AS DECIMAL(65, 30)) - CAST(t_filter_sub_1.ref0 AS DECIMAL(65, 30))
                          ) AS CHAR
                        ),
                        CAST((t_filter_sub_1.ref0 <= t_filter_sub_1.ref0) AS CHAR)
                      ) IN (t_filter_sub_1.ref0, CURRENT_USER())
                  ) AS t_filter_sub_1
              ) AS t_branch
            EXCEPT ALL
            SELECT
              t_filter_sub_2.ref0 AS ref0
            FROM
              (
                SELECT
                  *
                FROM
                  (
                    SELECT
                      `t_filter_sub_0`.`ref0` AS `ref0`
                    FROM
                      (
                        SELECT DISTINCT
                          -(
                            (
                              -(
                                (
                                  (`t0`.`c0`) IN (0.7789219850278478)
                                )
                                OR (
                                  EXISTS(
                                    SELECT
                                      1 AS `1`
                                  )
                                )
                              )
                            )
                            OR (CAST(`t0`.`c0` AS SIGNED))
                          ) AS `ref0`
                        FROM
                          `t0` AS `t0`,
                          `t1` AS `t1`
                        GROUP BY
                          0.14607308465245217
                      ) AS `t_filter_sub_0`
                    WHERE
                      TRUE
                  ) AS t_filter_sub_2
                WHERE
                  IFNULL(
                    CAST(
                      (
                        CAST(t_filter_sub_2.ref0 AS DECIMAL(65, 30)) - CAST(t_filter_sub_2.ref0 AS DECIMAL(65, 30))
                      ) AS CHAR
                    ),
                    CAST((t_filter_sub_2.ref0 <= t_filter_sub_2.ref0) AS CHAR)
                  ) IN (t_filter_sub_2.ref0, CURRENT_USER())
              ) AS t_filter_sub_2
          )
        ) AS t_filter_sub_0
      

      I don't believe this all is necessary to see the crash...

      Attachments

        Issue Links

          Activity

            People

              psergei Sergei Petrunia
              Yuxiao Guo Yuxiao Guo
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:

                Git Integration

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