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

LP:628785 - multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(): Assertion `do_sort_keys || do_rowid_fetch' failed with join_cache_level=8, mrr_sort_keys=off

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:

      Description

      This query

      SELECT table1 .`col_varchar_key`
      FROM D table1 STRAIGHT_JOIN ( D table3 JOIN D table4 ON table4 .`pk` = table3 .`col_int_nokey` ) ON table4 .`col_varchar_nokey` ;

      when run with join_cache_level=8 and optimizer_switch='mrr_sort_keys=off' causes the following backtrace:

      mysqld: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(handler*, RANGE_SEQ_IF*, void*, uint, uint, HANDLER_BUFFER*): Assertion `do_sort_keys || do_rowid_fetch' failed.

      /lib/libc.so.6(__assert_fail+0xf8) [0xa72d98]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(DsMrr_impl::dsmrr_init(handler*, st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x1d4) [0x8498890]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(ha_innobase::multi_range_read_init(st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x41) [0x866a751]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA::init_join_matching_records(st_range_seq_if*, unsigned int)+0x12c) [0x82da42c]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA_UNIQUE::join_matching_records(bool)+0x11e) [0x82db632]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0x1ae) [0x831f48e]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::generate_full_extensions(unsigned char*)+0xc0) [0x82d9aa4]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BNL::join_matching_records(bool)+0x321) [0x82d9883]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x19e) [0x82d9484]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0xa2) [0x831f382]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select(JOIN*, st_join_table*, bool)+0x71) [0x831f59b]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x831eb55]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN::exec()+0xadf) [0x830320d]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_select(THD*, Item**, TABLE_LIST, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*)+0x34a) [0x830560d]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_select(THD*, st_lex*, select_result*, unsigned long)+0x1cf) [0x82fdbff]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x829c1a4]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_execute_command(THD*)+0x881) [0x8292b7c]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_parse(THD*, char const*, unsigned int, char const**)+0x248) [0x829e365]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x87b) [0x8290632]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(do_command(THD*)+0x273) [0x828fb20]
      /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_one_connection+0x152) [0x828cb58]

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            philipstoev Philip Stoev added a comment -

            multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(handler*, RANGE_SEQ_IF*, void*, uint, uint, HANDLER_BUFFER*): Assertion `do_sort_keys || do_rowid_fetch' failed.
            This sequence:

            mysql> set @@optimizer_switch='mrr_sort_keys=off';
            mysql> explain SELECT DISTINCT table1 . `col_varchar_nokey` AS field1 FROM ( D AS table1 RIGHT OUTER JOIN ( D AS table2 STRAIGHT_JOIN ( ( D AS table3 LEFT JOIN D AS table4 ON (( table4 . `pk` = table3 . `col_int_nokey` ) OR ( table4 . `col_int_key` != table3 . `col_int_nokey` ) ) ) ) ON (( table4 . `col_int_key` = table3 . `col_int_key` ) AND ( table4 . `col_int_nokey` = table3 . `pk` ) ) ) ON (( table4 .`pk` != table3 . `col_int_nokey` ) AND (table4 .`pk` >= table3 . `pk` ) ) ) WHERE ( table1 . `col_varchar_key` = table1 . `col_varchar_key` OR table1 . `pk` = 159 ) AND table2 . `col_int_key` != table3 . `col_varchar_nokey` ORDER BY field1 , table1 . `col_varchar_key` ASC;
            mysql> SELECT DISTINCT table1 . `col_varchar_nokey` AS field1 FROM ( D AS table1 RIGHT OUTER JOIN ( D AS table2 STRAIGHT_JOIN ( ( D AS table3 LEFT JOIN D AS table4 ON (( table4 . `pk` = table3 . `col_int_nokey` ) OR ( table4 . `col_int_key` != table3 . `col_int_nokey` ) ) ) ) ON (( table4 . `col_int_key` = table3 . `col_int_key` ) AND ( table4 . `col_int_nokey` = table3 . `pk` ) ) ) ON (( table4 .`pk` != table3 . `col_int_nokey` ) AND (table4 .`pk` >= table3 . `pk` ) ) ) WHERE ( table1 . `col_varchar_key` = table1 . `col_varchar_key` OR table1 . `pk` = 159 ) AND table2 . `col_int_key` != table3 . `col_varchar_nokey` ORDER BY field1 , table1 . `col_varchar_key` ASC;

            seems to have caused the following backtrace:

            mysqld: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(handler*, RANGE_SEQ_IF*, void*, uint, uint, HANDLER_BUFFER*): Assertion `do_sort_keys || do_rowid_fetch' failed.

            /lib/libc.so.6(__assert_fail+0xf8) [0xa72d98]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(DsMrr_impl::dsmrr_init(handler*, st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x1d4) [0x8498890]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(ha_innobase::multi_range_read_init(st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x41) [0x866a751]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA::init_join_matching_records(st_range_seq_if*, unsigned int)+0x12c) [0x82da42c]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA_UNIQUE::join_matching_records(bool)+0x11e) [0x82db632]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0x1ae) [0x831f48e]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::generate_full_extensions(unsigned char*)+0xc0) [0x82d9aa4]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BNL::join_matching_records(bool)+0x321) [0x82d9883]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x19e) [0x82d9484]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0xa2) [0x831f382]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select(JOIN*, st_join_table*, bool)+0x71) [0x831f59b]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x831eb55]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN::exec()+0xadf) [0x830320d]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_select(THD*, Item**, TABLE_LIST, unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*)+0x34a) [0x830560d]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_select(THD*, st_lex*, select_result*, unsigned long)+0x1cf) [0x82fdbff]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x829c1a4]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_execute_command(THD*)+0x881) [0x8292b7c]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_parse(THD*, char const*, unsigned int, char const**)+0x248) [0x829e365]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x87b) [0x8290632]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(do_command(THD*)+0x273) [0x828fb20]
            /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_one_connection+0x152) [0x828cb58]

            Show
            philipstoev Philip Stoev added a comment - multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(handler*, RANGE_SEQ_IF*, void*, uint, uint, HANDLER_BUFFER*): Assertion `do_sort_keys || do_rowid_fetch' failed. This sequence: mysql> set @@optimizer_switch='mrr_sort_keys=off'; mysql> explain SELECT DISTINCT table1 . `col_varchar_nokey` AS field1 FROM ( D AS table1 RIGHT OUTER JOIN ( D AS table2 STRAIGHT_JOIN ( ( D AS table3 LEFT JOIN D AS table4 ON (( table4 . `pk` = table3 . `col_int_nokey` ) OR ( table4 . `col_int_key` != table3 . `col_int_nokey` ) ) ) ) ON (( table4 . `col_int_key` = table3 . `col_int_key` ) AND ( table4 . `col_int_nokey` = table3 . `pk` ) ) ) ON (( table4 .`pk` != table3 . `col_int_nokey` ) AND (table4 .`pk` >= table3 . `pk` ) ) ) WHERE ( table1 . `col_varchar_key` = table1 . `col_varchar_key` OR table1 . `pk` = 159 ) AND table2 . `col_int_key` != table3 . `col_varchar_nokey` ORDER BY field1 , table1 . `col_varchar_key` ASC; mysql> SELECT DISTINCT table1 . `col_varchar_nokey` AS field1 FROM ( D AS table1 RIGHT OUTER JOIN ( D AS table2 STRAIGHT_JOIN ( ( D AS table3 LEFT JOIN D AS table4 ON (( table4 . `pk` = table3 . `col_int_nokey` ) OR ( table4 . `col_int_key` != table3 . `col_int_nokey` ) ) ) ) ON (( table4 . `col_int_key` = table3 . `col_int_key` ) AND ( table4 . `col_int_nokey` = table3 . `pk` ) ) ) ON (( table4 .`pk` != table3 . `col_int_nokey` ) AND (table4 .`pk` >= table3 . `pk` ) ) ) WHERE ( table1 . `col_varchar_key` = table1 . `col_varchar_key` OR table1 . `pk` = 159 ) AND table2 . `col_int_key` != table3 . `col_varchar_nokey` ORDER BY field1 , table1 . `col_varchar_key` ASC; seems to have caused the following backtrace: mysqld: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(handler*, RANGE_SEQ_IF*, void*, uint, uint, HANDLER_BUFFER*): Assertion `do_sort_keys || do_rowid_fetch' failed. /lib/libc.so.6(__assert_fail+0xf8) [0xa72d98] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(DsMrr_impl::dsmrr_init(handler*, st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x1d4) [0x8498890] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(ha_innobase::multi_range_read_init(st_range_seq_if*, void*, unsigned int, unsigned int, st_handler_buffer*)+0x41) [0x866a751] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA::init_join_matching_records(st_range_seq_if*, unsigned int)+0x12c) [0x82da42c] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BKA_UNIQUE::join_matching_records(bool)+0x11e) [0x82db632] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0x1ae) [0x831f48e] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::generate_full_extensions(unsigned char*)+0xc0) [0x82d9aa4] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE_BNL::join_matching_records(bool)+0x321) [0x82d9883] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x6c) [0x82d9352] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN_CACHE::join_records(bool)+0x19e) [0x82d9484] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select_cache(JOIN*, st_join_table*, bool)+0xa2) [0x831f382] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(sub_select(JOIN*, st_join_table*, bool)+0x71) [0x831f59b] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x831eb55] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(JOIN::exec()+0xadf) [0x830320d] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_select(THD*, Item** , TABLE_LIST , unsigned int, List<Item>&, Item*, unsigned int, st_order*, st_order*, Item*, st_order*, unsigned long long, select_result*, st_select_lex_unit*, st_select_lex*)+0x34a) [0x830560d] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_select(THD*, st_lex*, select_result*, unsigned long)+0x1cf) [0x82fdbff] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld() [0x829c1a4] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_execute_command(THD*)+0x881) [0x8292b7c] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(mysql_parse(THD*, char const*, unsigned int, char const**)+0x248) [0x829e365] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0x87b) [0x8290632] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(do_command(THD*)+0x273) [0x828fb20] /home/philips/bzr/maria-5.3-dsmrr-cpk/sql/mysqld(handle_one_connection+0x152) [0x828cb58]
            Hide
            philipstoev Philip Stoev added a comment -

            Re: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(): Assertion `do_sort_keys || do_rowid_fetch' failed with join_cache_level=8, mrr_sort_keys=off
            Test case:

            --disable_warnings
            --source include/have_innodb.inc

            SET SESSION join_cache_level=9;
            SET SESSION optimizer_switch='mrr_sort_keys=off';

            CREATE TABLE `D` (
            `pk` int(11) NOT NULL AUTO_INCREMENT,
            `col_int_nokey` int(11) DEFAULT NULL,
            `col_int_key` int(11) DEFAULT NULL,
            `col_varchar_key` varchar(1) DEFAULT NULL,
            `col_varchar_nokey` varchar(1) DEFAULT NULL,
            PRIMARY KEY (`pk`),
            KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`)
            ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1;
            INSERT INTO `D` VALUES (1,6,NULL,'r','r');
            INSERT INTO `D` VALUES (2,8,0,'c','c');
            INSERT INTO `D` VALUES (97,7,0,'z','z');
            INSERT INTO `D` VALUES (98,1,1,'j','j');
            INSERT INTO `D` VALUES (99,7,8,'c','c');
            INSERT INTO `D` VALUES (100,2,5,'f','f');
            SELECT table1 .`col_varchar_key`
            FROM D table1 STRAIGHT_JOIN ( D table3 JOIN D table4 ON table4 .`pk` = table3 .`col_int_nokey` ) ON table4 .`col_varchar_nokey` ;

            Show
            philipstoev Philip Stoev added a comment - Re: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(): Assertion `do_sort_keys || do_rowid_fetch' failed with join_cache_level=8, mrr_sort_keys=off Test case: --disable_warnings --source include/have_innodb.inc SET SESSION join_cache_level=9; SET SESSION optimizer_switch='mrr_sort_keys=off'; CREATE TABLE `D` ( `pk` int(11) NOT NULL AUTO_INCREMENT, `col_int_nokey` int(11) DEFAULT NULL, `col_int_key` int(11) DEFAULT NULL, `col_varchar_key` varchar(1) DEFAULT NULL, `col_varchar_nokey` varchar(1) DEFAULT NULL, PRIMARY KEY (`pk`), KEY `col_varchar_key` (`col_varchar_key`,`col_int_key`) ) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=latin1; INSERT INTO `D` VALUES (1,6,NULL,'r','r'); INSERT INTO `D` VALUES (2,8,0,'c','c'); INSERT INTO `D` VALUES (97,7,0,'z','z'); INSERT INTO `D` VALUES (98,1,1,'j','j'); INSERT INTO `D` VALUES (99,7,8,'c','c'); INSERT INTO `D` VALUES (100,2,5,'f','f'); SELECT table1 .`col_varchar_key` FROM D table1 STRAIGHT_JOIN ( D table3 JOIN D table4 ON table4 .`pk` = table3 .`col_int_nokey` ) ON table4 .`col_varchar_nokey` ;
            Hide
            psergey Sergei Petrunia added a comment -

            Re: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(): Assertion `do_sort_keys || do_rowid_fetch' failed with join_cache_level=8, mrr_sort_keys=off
            Fixed in 5.3-dsmrr-cpk tree

            Show
            psergey Sergei Petrunia added a comment - Re: multi_range_read.cc:430: int DsMrr_impl::dsmrr_init(): Assertion `do_sort_keys || do_rowid_fetch' failed with join_cache_level=8, mrr_sort_keys=off Fixed in 5.3-dsmrr-cpk tree
            Hide
            ratzpo Rasmus Johansson added a comment -

            Launchpad bug id: 628785

            Show
            ratzpo Rasmus Johansson added a comment - Launchpad bug id: 628785

              People

              • Assignee:
                psergey Sergei Petrunia
                Reporter:
                philipstoev Philip Stoev
              • Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: