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

Server crashes in Index_statistics::avg_frequency_is_inited on concurrent ALTER and SELECT from a normal table and I_S

    Details

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

      Description

      #3  <signal handler called>
      #4  0x00000000006a3826 in Index_statistics::avg_frequency_is_inited (this=0x0) at /home10.0-base/sql/sql_statistics.h:234
      #5  0x00000000006a334e in set_statistics_for_table (thd=0x2d6abb0, table=0x7f84c0ef4440) at /home10.0-base/sql/sql_statistics.cc:3046
      #6  0x0000000000695197 in get_schema_stat_record (thd=0x2d6abb0, tables=0x7f84c0ef3e08, table=0x7f84c0df6ef8, res=false, db_name=0x7f84c0de3ca8, table_name=0x7f84c0eebcd8) at /home10.0-base/sql/sql_show.cc:5937
      #7  0x000000000068da7c in fill_schema_table_by_open (thd=0x2d6abb0, is_show_fields_or_keys=false, table=0x7f84c0df6ef8, schema_table=0x13ab1a0, orig_db_name=0x7f84c0de3ca8, orig_table_name=0x7f84c0eebcd8, open_tables_state_backup=0x7f84bb513210, can_deadlock=false) at /home10.0-base/sql/sql_show.cc:4078
      #8  0x000000000068f094 in get_all_tables (thd=0x2d6abb0, tables=0x7f84c0e83918, cond=0x7f84c0dd8e28) at /home10.0-base/sql/sql_show.cc:4731
      #9  0x000000000069d00e in do_fill_table (thd=0x2d6abb0, table_list=0x7f84c0e83918, join_table=0x7f84c0e9cc58) at /home10.0-base/sql/sql_show.cc:7887
      #10 0x000000000069d420 in get_schema_tables_result (join=0x7f84c0de2748, executed_place=PROCESSED_BY_JOIN_EXEC) at /home10.0-base/sql/sql_show.cc:7994
      #11 0x0000000000646bc8 in JOIN::exec_inner (this=0x7f84c0de2748) at /home10.0-base/sql/sql_select.cc:2414
      #12 0x0000000000646225 in JOIN::exec (this=0x7f84c0de2748) at /home10.0-base/sql/sql_select.cc:2258
      #13 0x000000000064984d in mysql_select (thd=0x2d6abb0, rref_pointer_array=0x2d6dad0, tables=0x7f84c0e83918, wild_num=1, fields=..., conds=0x7f84c0e2a428, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2684619520, result=0x7f84c0e43c58, unit=0x2d6d128, select_lex=0x2d6d820) at /home10.0-base/sql/sql_select.cc:3194
      #14 0x00000000006400de in handle_select (thd=0x2d6abb0, lex=0x2d6d078, result=0x7f84c0e43c58, setup_tables_done_option=0) at /home10.0-base/sql/sql_select.cc:368
      #15 0x0000000000617963 in execute_sqlcom_select (thd=0x2d6abb0, all_tables=0x7f84c0e83918) at /home10.0-base/sql/sql_parse.cc:4766
      #16 0x000000000060fff3 in mysql_execute_command (thd=0x2d6abb0) at /home10.0-base/sql/sql_parse.cc:2246
      #17 0x000000000061a1cb in mysql_parse (thd=0x2d6abb0, rawbuf=0x7f84c0e0f448 "SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE `INDEX_TYPE` <> 'int' AND `TABLE_CATALOG` <= 'test'", length=101, parser_state=0x7f84bb5144f0) at /home10.0-base/sql/sql_parse.cc:5881
      #18 0x000000000060d339 in dispatch_command (command=COM_QUERY, thd=0x2d6abb0, packet=0x2d6e8d1 "SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE `INDEX_TYPE` <> 'int' AND `TABLE_CATALOG` <= 'test'", packet_length=101) at /home10.0-base/sql/sql_parse.cc:1072
      #19 0x000000000060c5f0 in do_command (thd=0x2d6abb0) at /home10.0-base/sql/sql_parse.cc:811
      #20 0x0000000000720ab5 in do_handle_one_connection (thd_arg=0x2d6abb0) at /home10.0-base/sql/sql_connect.cc:1253
      #21 0x00000000007204a0 in handle_one_connection (arg=0x2d6abb0) at /home10.0-base/sql/sql_connect.cc:1168
      #22 0x0000000000bc68c1 in pfs_spawn_thread (arg=0x2d577f0) at /home10.0-base/storage/perfschema/pfs.cc:1015
      #23 0x00007f84d19efefc in start_thread (arg=0x7f84bb515700) at pthread_create.c:304
      #24 0x00007f84d0d61f4d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
      
      revision-id: igor@askmonty.org-20130109033433-5awdv0w6vbpigltw
      revno: 3458
      branch-nick: 10.0-base
      

      Built with BUILD/compile-pentium-valgrind-max-no-ndb.
      Was also reproducible with BUILD/compile-pentium-debug-max-no-ndb.
      With more concurrency was also happening on non-debug builds.
      Reproducible on at least 2 different machines (Ubuntu 64-bit and Windows Server 2012 64-bit).

      There is an MTR concurrent test and an RQG grammar; the flow in them is exactly the same. RQG crashes on my machines within seconds after start, MTR takes longer, sometimes several minutes. Please choose whichever works better for you.

      MTR test case

      # Run as perl mysql-test-run.pl --mysqld=--disable-debug <test name>
      # (It happens without --disable-debug too, but with the option it seems to happen faster)
      
      --source include/have_xtradb.inc
      
      SET GLOBAL use_stat_tables = PREFERABLY;
      DROP TABLE IF EXISTS A;
      CREATE TABLE A ( `col_int_nokey` INT, `col_int_key` INT, KEY (`col_int_key`) ) ENGINE=InnoDB;
      INSERT INTO A VALUES (7, 1),(4, 2);
      
      --connect (con1,localhost,root,,)
      --connect (con2,localhost,root,,)
      
      --let $run = 1000
      
      --disable_query_log
      --disable_result_log
      
      while ($run)
      {
      --echo # $run rounds left
      --connection default
      --send
      ALTER TABLE A ADD COLUMN k INTEGER;
      
      --connection con1
      --send
      SELECT * FROM A;
      
      --connection con2
        SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE `INDEX_TYPE` <> 'int' AND `TABLE_CATALOG` <= 'test';
      
      --connection con1
      --reap
      
      --connection default
      --reap
        ALTER TABLE A DROP COLUMN k;
      
      --dec $run
      }
      --echo # All done
      
      --enable_query_log
      --enable_result_log
      DROP TABLE A;
      

      RQG test

      start MariaDB server with 
      --port=3306 --disable-debug 
      (no other options are required except for usual paths etc.);
      bzr branch lp:randgen (if not branched yet);
      cd randgen
      # create an empty test.yy file and copy the contents of the grammar below into it;
      run
      perl ./gentest.pl --threads=3 --queries=100M --duration=400 --dsn=dbi:mysql:host=127.0.0.1:port=3306:user=root:database=test --grammar=test.yy
      

      Grammar:

      thread1_init:
        SET use_stat_tables = PREFERABLY 
        ; DROP TABLE IF EXISTS A 
        ; CREATE TABLE A ( `col_int_nokey` INT, `col_int_key` INT, KEY (`col_int_key`) ) ENGINE=InnoDB 
        ; INSERT INTO A VALUES (7, 1),(4, 2) ;
      
      thread1:
      	ALTER TABLE A ADD COLUMN _letter INTEGER |
      	ALTER TABLE A DROP COLUMN _letter ;
      
      thread2:
        SELECT * FROM A ;
      
      query:
        SELECT * FROM INFORMATION_SCHEMA.STATISTICS WHERE `INDEX_TYPE` <> 'int' AND `TABLE_CATALOG` <= 'test' ;
      

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            elenst Elena Stepanova added a comment -

            Forgot to fill versions, setting now.

            Show
            elenst Elena Stepanova added a comment - Forgot to fill versions, setting now.
            Hide
            igor Igor Babaev added a comment -

            I failed to reproduce this problem.

            Show
            igor Igor Babaev added a comment - I failed to reproduce this problem.
            Hide
            igor Igor Babaev added a comment -

            I pushed a fix for the bug into 10.0-base.

            Elena, please test it.

            Show
            igor Igor Babaev added a comment - I pushed a fix for the bug into 10.0-base. Elena, please test it.
            Hide
            elenst Elena Stepanova added a comment -

            I didn't observe any crashes that I would suspect to be related to this bug in post-fix tests on revno 3468, considering it fully fixed.

            Show
            elenst Elena Stepanova added a comment - I didn't observe any crashes that I would suspect to be related to this bug in post-fix tests on revno 3468, considering it fully fixed.

              People

              • Assignee:
                igor Igor Babaev
                Reporter:
                elenst Elena Stepanova
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0 minutes
                  0m
                  Logged:
                  Time Spent - 3 hours, 30 minutes
                  3h 30m