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

InnoDB: Assertion failure in file ./storage/innobase/page/page0zip.cc line 4211

    XMLWordPrintable

Details

    • Bug
    • Status: Closed (View Workflow)
    • Critical
    • Resolution: Fixed
    • 10.6.17, 10.11, 11.1(EOL), 11.2, 11.4, 11.5(EOL)
    • 10.6.19, 10.11.9, 11.1.6, 11.2.5, 11.4.3
    • Server
    • None
    • Linux Ubuntu 22.04

    Description

      We received the first error of table corruption at

      2024-06-08 1:31:13 1018409755 [ERROR] mariadbd: Index for table 'table1' is corrupt; try to repair it

      The this happened when a query tried to access the table:

      2024-06-08 14:16:34 0x7f8444b69640  InnoDB: Assertion failure in file ./storage/innobase/page/page0zip.cc line 4211
      InnoDB: Failing assertion: slot_rec
      InnoDB: We intentionally generate a memory trap.
      InnoDB: Submit a detailed bug report to https://jira.mariadb.org/
      InnoDB: If you get repeated assertion failures or crashes, even
      InnoDB: immediately after the mariadbd startup, there may be
      InnoDB: corruption in the InnoDB tablespace. Please refer to
      InnoDB: https://mariadb.com/kb/en/library/innodb-recovery-modes/
      InnoDB: about forcing recovery.
      240608 14:16:34 [ERROR] mysqld got signal 6 ;
      Sorry, we probably made a mistake, and this is a bug.
       
      Your assistance in bug reporting will enable us to fix this for the next release.
      To report this bug, see https://mariadb.com/kb/en/reporting-bugs
       
      We will try our best to scrape up some info that will hopefully help
      diagnose the problem, but since we have already crashed,  
      something is definitely wrong and this may fail.
       
      Server version: 10.6.17-MariaDB-1:10.6.17+maria~ubu2204-log source revision: 15c75ad083a55e198ae78324f22970694b72f22b
      key_buffer_size=16777216
      read_buffer_size=131072
      max_used_connections=1272
      max_threads=10002
      thread_count=400
      It is possible that mysqld could use up to  
      key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 22044434 K  bytes of memory
      Hope that's ok; if not, decrease some variables in the equation.
       
      Thread pointer: 0x7eed8c12b4e8
      Attempting backtrace. You can use the following information to find out
      where mysqld died. If you see no messages after this, something went
      terribly wrong...
      stack_bottom = 0x7f8444b68c38 thread_stack 0x40000
      /usr/sbin/mariadbd(my_print_stacktrace+0x32)[0x55d7bc2dabe2]
      /usr/sbin/mariadbd(handle_fatal_signal+0x478)[0x55d7bbd862c8]
      libc_sigaction.c:0(__restore_rt)[0x7f8455cd0520]
      nptl/pthread_kill.c:44(__pthread_kill_implementation)[0x7f8455d249fc]
      posix/raise.c:27(__GI_raise)[0x7f8455cd0476]
      stdlib/abort.c:81(__GI_abort)[0x7f8455cb67f3]
      /usr/sbin/mariadbd(+0x67c0d6)[0x55d7bb9e50d6]
      /usr/sbin/mariadbd(+0xdb2c9e)[0x55d7bc11bc9e]
      /usr/sbin/mariadbd(+0xda2635)[0x55d7bc10b635]
      /usr/sbin/mariadbd(+0xe5a83c)[0x55d7bc1c383c]
      /usr/sbin/mariadbd(+0xdd3cfd)[0x55d7bc13ccfd]
      /usr/sbin/mariadbd(+0xdd693d)[0x55d7bc13f93d]
      /usr/sbin/mariadbd(+0xdd6df2)[0x55d7bc13fdf2]
      /usr/sbin/mariadbd(+0xde6c19)[0x55d7bc14fc19]
      /usr/sbin/mariadbd(+0xd398ca)[0x55d7bc0a28ca]
      /usr/sbin/mariadbd(_ZN7handler12ha_write_rowEPKh+0x1f0)[0x55d7bbd95830]
      /usr/sbin/mariadbd(_Z12write_recordP3THDP5TABLEP12st_copy_infoP13select_result+0x1dd)[0x55d7bbafd9ed]
      /usr/sbin/mariadbd(_Z12mysql_insertP3THDP10TABLE_LISTR4ListI4ItemERS3_IS5_ES6_S6_15enum_duplicatesbP13select_result+0xd3a)[0x55d7bbb072ea]
      /usr/sbin/mariadbd(_Z21mysql_execute_commandP3THDb+0x14c9)[0x55d7bbb3bb09]
      /usr/sbin/mariadbd(_Z11mysql_parseP3THDPcjP12Parser_state+0x1e7)[0x55d7bbb40487]
      /usr/sbin/mariadbd(_Z16dispatch_command19enum_server_commandP3THDPcjb+0x14cd)[0x55d7bbb42c7d]
      /usr/sbin/mariadbd(_Z10do_commandP3THDb+0x138)[0x55d7bbb44b98]
      /usr/sbin/mariadbd(_Z24do_handle_one_connectionP7CONNECTb+0x3bf)[0x55d7bbc5a5af]
      /usr/sbin/mariadbd(handle_one_connection+0x5d)[0x55d7bbc5a8fd]
      /usr/sbin/mariadbd(+0xc7c8d6)[0x55d7bbfe58d6]
      nptl/pthread_create.c:442(start_thread)[0x7f8455d22ac3]
      x86_64/clone3.S:83(__clone3)[0x7f8455db4850]
       
      Trying to get some variables.
      Some pointers may be invalid and cause the dump to abort.
      Query (0x7eed8f80c160): INSERT INTO `table1`(`fk1_id`, `fk2_id`, `fk3_id`, `start_date`, `end_date`) VALUES ('11', '61', '1486327', '2024-06-08 14:16:34', '2024-06-15 23:59:59')
       
      Connection ID (thread ID): 1023439276
      Status: NOT_KILLED
       
      Optimizer switch: 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,p
      artial_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_ca
      che_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_derive
      d=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=off,cset_narr
      owing=off
       
      The manual page at https://mariadb.com/kb/en/how-to-produce-a-full-stack-trace-for-mariadbd/ contains
      information that should help you find out what is causing the crash.
      Writing a core file...
      Working directory at /var/lib/mysql
      Resource Limits:
      Limit                     Soft Limit           Hard Limit           Units      
      Max cpu time              unlimited            unlimited            seconds    
      Max file size             unlimited            unlimited            bytes      
      Max data size             unlimited            unlimited            bytes      
      Max stack size            8388608              unlimited            bytes      
      Max core file size        0                    unlimited            bytes      
      Max resident set          unlimited            unlimited            bytes      
      Max processes             4126213              4126213              processes  
      Max open files            32768                32768                files      
      Max locked memory         524288               524288               bytes      
      Max address space         unlimited            unlimited            bytes      
      Max file locks            unlimited            unlimited            locks      
      Max pending signals       4126213              4126213              signals    
      Max msgqueue size         819200               819200               bytes      
      Max nice priority         0                    0                     
      Max realtime priority     0                    0                     
      Max realtime timeout      unlimited            unlimited            us         
      Core pattern: |/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E
       
       
      Kernel version: Linux version 5.15.0-97-generic (buildd@lcy02-amd64-033) (gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #107-Ubuntu SMP
      Wed Feb 7 13:26:48 UTC 2024
      

      We have the file that apport created. It is 13gb long and it seems to contain the core dump. This is from a production system and will contain sensitive data, so we can't just upload it. If there are specific requests / commands, we can run them on the core file.

      CREATE TABLE `table1` (
        `table1_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
        `fk1_id` int(10) unsigned DEFAULT NULL,
        `used` tinyint(1) NOT NULL DEFAULT 0,
        `fk2_id` int(10) unsigned DEFAULT NULL,
        `fk3_id` int(10) unsigned DEFAULT NULL,
        `start_date` datetime NOT NULL,
        `end_date` datetime NOT NULL,
        PRIMARY KEY (`table1_id`),
        UNIQUE KEY `table1_uk` (`fk1_id`,`fk3_id`),
        KEY `table1_fk2` (`fk3_id`),
        KEY `table1_fk3` (`fk2_id`),
        CONSTRAINT `table1_ibfk_1` FOREIGN KEY (`fk1_id`) REFERENCES `table_for_fk1` (`fk1_id`),
        CONSTRAINT `table1_ibfk_2` FOREIGN KEY (`fk3_id`) REFERENCES `table_for_fk3` (`fk3_id`),
        CONSTRAINT `table1_ibfk_3` FOREIGN KEY (`fk2_id`) REFERENCES `table_for_fk2` (`fk2_id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=8505097 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPRESSED

      Data was successfully inserted into the affected table between the corruption log entry at 1:31:13 and the assertion.

      CHECK TABLE produced this log output:

      2024-06-08 18:31:53 3022967 [ERROR] InnoDB: In pages [page id: space=227292, page number=44] and [page id: space=227292, page number=45] of index `table1_fk2` of table `clientDb`.`table1`
      InnoDB: records in wrong order on adjacent pages
      InnoDB: record PHYSICAL RECORD: n_fields 2; compact format; info bits 0
       0: len 4; hex 0016adf7; asc     ;;
       1: len 4; hex 0081680a; asc   h ;;
       
      InnoDB: record PHYSICAL RECORD: n_fields 2; compact format; info bits 0
       0: len 4; hex 00152869; asc   (i;;
       1: len 4; hex 0080dfd3; asc     ;;
       
      InnoDB: node pointer to the right page is wrong
      2024-06-08 18:31:53 3022967 [ERROR] InnoDB: In page 44 of index `table1_fk2` of table `clientDb`.`table1`
      2024-06-08 18:31:53 3022967 [ERROR] InnoDB: In page 45 of index `table1_fk2` of table `clientDb`.`table1`
      InnoDB: node pointer to the page is wrong
      InnoDB: node ptr PHYSICAL RECORD: n_fields 3; compact format; info bits 0
       0: len 4; hex 00151fef; asc     ;;
       1: len 4; hex 006bb459; asc  k Y;;
       2: len 4; hex 0000002c; asc    ,;;
       
      InnoDB: node ptr child page n:o 45
      InnoDB: record on page PHYSICAL RECORD: n_fields 3; compact format; info bits 0
       0: len 4; hex 0017001d; asc     ;;
       1: len 4; hex 00813e5b; asc   >[;;
       2: len 4; hex 0000002d; asc    -;;
       
      2024-06-08 18:31:53 3022967 [ERROR] InnoDB: index records in a wrong order in `table1_fk2` of table `clientDb`.`table1`: TUPLE (info_bits=0, 2 fields): {[4]    (0x0016ADF7),[4]  h (0x0081680A)}, COMPACT RECORD(info_bits=0, 2 fields): {[4]  (i(0x00152869),[4]    (0x0080DFD3)}
      2024-06-08 18:31:53 3022967 [ERROR] InnoDB: Flagged corruption of `table1_fk2` in table `clientDb`.`table1` in CHECK TABLE-check index
      

      We already restored the table on the server. This is about the crash itself.
      We do not have ROLLBACK on the tables according to the binary log.

      Attachments

        Issue Links

          Activity

            People

              thiru Thirunarayanan Balathandayuthapani
              sbakhos Stephane Bakhos
              Votes:
              0 Vote for this issue
              Watchers:
              6 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.