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

dict_sys_t::load_table() is holding exclusive dict_sys.latch for unnecessarily long time

    XMLWordPrintable

Details

    • Related to performance
    • Q4/2026 Server Maintenance, Q1/2027 Server Maintenance

    Description

      Server crashes when using more than 8K partitions in a table. Startup options used to reproduce the issue --sql_mode= --deadlock-timeout-short=10 --deadlock-timeout-long=10 --deadlock-search-depth-short=10 --deadlock-search-depth-long=33 --innodb-fatal-semaphore-wait-threshold=2 --innodb-read-io-threads=1

      Could not reproduce the issue in `rr`. The issue seems to be system specific and reproduced only on busy server

      Attached test case in.sql and full back trace full_back_trace.log .

      CS 11.6.2 ba7088d462c326c9df7de97a46fe69419cd7e116 (Debug)

      Core was generated by `/test/MD031024-mariadb-11.6.2-linux-x86_64-dbg/bin/mariadbd --no-defaults --max'.
      Program terminated with signal SIGABRT, Aborted.
      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
      [Current thread is 1 (Thread 0x14bf685f2700 (LWP 1603475))]
      (gdb) bt
      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
      #1  0x000014bf92473859 in __GI_abort () at abort.c:79
      #2  0x000055a9eebdf701 in ib::fatal::~fatal (this=<optimized out>, __in_chrg=<optimized out>) at /test/11.6_dbg/storage/innobase/ut/ut0ut.cc:488
      #3  0x000055a9eec95a58 in dict_sys_t::lock_wait (this=this@entry=0x55a9efa07d40 <dict_sys>, file=file@entry=0x55a9ef2c8d40 "/test/11.6_dbg/storage/innobase/trx/trx0purge.cc", line=line@entry=1135) at /test/11.6_dbg/storage/innobase/include/ut0ut.h:323
      #4  0x000055a9eeb9cabb in dict_sys_t::lock (line=1135, file=0x55a9ef2c8d40 "/test/11.6_dbg/storage/innobase/trx/trx0purge.cc", this=<optimized out>) at /test/11.6_dbg/storage/innobase/include/dict0dict.h:1494
      #5  trx_purge_table_open (table_id=18, mdl_context=mdl_context@entry=0x55a9f1f49ee0, mdl=mdl@entry=0x14bf685f1aa8) at /test/11.6_dbg/storage/innobase/trx/trx0purge.cc:1135
      #6  0x000055a9eeba2ea2 in trx_purge_attach_undo_recs (n_work_items=<synthetic pointer>, thd=<optimized out>) at /test/11.6_dbg/storage/innobase/trx/trx0purge.cc:1250
      #7  trx_purge (n_tasks=n_tasks@entry=4, history_size=<optimized out>) at /test/11.6_dbg/storage/innobase/trx/trx0purge.cc:1368
      #8  0x000055a9eeb8c1b1 in purge_coordinator_state::do_purge (this=0x55a9f036cc20 <purge_state>) at /test/11.6_dbg/storage/innobase/srv/srv0srv.cc:1426
      #9  purge_coordinator_callback () at /test/11.6_dbg/storage/innobase/srv/srv0srv.cc:1510
      #10 0x000055a9eed65e6d in tpool::task_group::execute (this=0x55a9f036ca80 <purge_coordinator_task_group>, t=t@entry=0x55a9f036c9e0 <purge_coordinator_task>) at /test/11.6_dbg/tpool/task_group.cc:73
      #11 0x000055a9eed65ef5 in tpool::task::execute (this=0x55a9f036c9e0 <purge_coordinator_task>) at /test/11.6_dbg/tpool/task.cc:32
      #12 0x000055a9eed6433d in tpool::thread_pool_generic::worker_main (this=0x55a9f1772930, thread_var=0x55a9f1ad2e20) at /test/11.6_dbg/tpool/tpool_generic.cc:583
      #13 0x000055a9eed64f78 in std::__invoke_impl<void, void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> (__t=<optimized out>, __f=<optimized out>) at /usr/include/c++/9/bits/invoke.h:89
      #14 std::__invoke<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> (__fn=<optimized out>) at /usr/include/c++/9/bits/invoke.h:95
      #15 std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> >::_M_invoke<0ul, 1ul, 2ul> (this=<optimized out>) at /usr/include/c++/9/thread:244
      #16 std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> >::operator() (this=<optimized out>) at /usr/include/c++/9/thread:251
      #17 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (tpool::thread_pool_generic::*)(tpool::worker_data*), tpool::thread_pool_generic*, tpool::worker_data*> > >::_M_run (this=<optimized out>) at /usr/include/c++/9/thread:195
      #18 0x000014bf9286ade4 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
      #19 0x000014bf92984609 in start_thread (arg=<optimized out>) at pthread_create.c:477
      #20 0x000014bf92570133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
      

      Attachments

        1. full_back_trace.log
          63 kB
          Ramesh Sivaraman
        2. in.sql
          405 kB
          Ramesh Sivaraman

        Issue Links

          Activity

            People

              tafzeel Mohammad Tafzeel Shams
              ramesh Ramesh Sivaraman
              Mohammad Tafzeel Shams Mohammad Tafzeel Shams
              Marko Mäkelä Marko Mäkelä
              Votes:
              1 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - 20d Original Estimate - 20d
                  20d
                  Remaining:
                  Time Spent - 20d 7.75h Remaining Estimate - 1d 7.25h
                  1d 7.25h
                  Logged:
                  Time Spent - 20d 7.75h Remaining Estimate - 1d 7.25h
                  20d 7.75h

                  Git Integration

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