1. 14 Oct, 2023 2 commits
    • Monty's avatar
      MDEV-32449 Server crashes in Alter_info::add_stat_drop_index upon CREATE TABLE · 1c554459
      Monty authored
      Fixed missing initialization of Alter_info()
      
      This could cause crashes in some create table like scenarios
      where some generated indexes where automatically dropped.
      
      I also added a test that we do not try to drop from index_stats for
      temporary tables.
      1c554459
    • Monty's avatar
      Do not create histograms for single column unique key · ec277a70
      Monty authored
      The intentention was always to not create histograms for single value
      unique keys (as histograms is not useful in this case), but because of
      a bug in the code this was still done.
      
      The changes in the test cases was mainly because hist_size is now NULL
      for these kind of columns.
      ec277a70
  2. 13 Oct, 2023 2 commits
    • Vlad Lesin's avatar
      MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit... · 18fa00a5
      Vlad Lesin authored
      MDEV-32272 lock_release_on_prepare_try() does not release lock if supremum bit is set along with other bits set in lock's bitmap
      
      The error is caused by MDEV-30165 fix with the following commit:
      d13a57ae
      
      There is logical error in lock_release_on_prepare_try():
      
              if (supremum_bit)
                lock_rec_unlock_supremum(*cell, lock);
              else
                lock_rec_dequeue_from_page(lock, false);
      
      Because there can be other bits set in the lock's bitmap, and the lock
      type can be suitable for releasing criteria, but the above logic
      releases only supremum bit of the lock.
      
      The fix is to release lock if it suits for releasing criteria and unlock
      supremum if supremum is locked otherwise.
      
      Tere is also the test for the case, which was reported by QA team. I
      placed it in a separate files, because it requires debug build.
      
      Reviewed by: Marko Mäkelä
      18fa00a5
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-31098 InnoDB Recovery doesn't display encryption message when no... · cbad0bcd
      Thirunarayanan Balathandayuthapani authored
      MDEV-31098  InnoDB Recovery doesn't display encryption message when no encryption configuration passed
      
      - InnoDB fails to report the error when encryption configuration
      wasn't passed. This patch addresses the issue by adding
      the error while loading the tablespace and deferring the
      tablespace creation.
      cbad0bcd
  3. 10 Oct, 2023 4 commits
  4. 08 Oct, 2023 1 commit
    • Otto Kekalainen's avatar
      Fix merge commit 5ea5291d: No test file or result files should be executable · 8941bdc4
      Otto Kekalainen authored
      In commit 5ea5291d @sanja-byelkin for unknown reason switched the file mode
      for 3 Galera tzinfo related test files from 644 -> 755. This exists only
      from branch 10.6 onward:
      
          $ git checkout 10.5
          $ find mysql-test -executable -name *.test -or -executable -name *.result
          (no results)
          $ git checkout 10.6
          $ find mysql-test -executable -name *.test -or -executable -name *.result
          mysql-test/suite/galera/t/mysql_tzmysql-test/suite/galera/t/mysql_tzinfo_to_sql.test
          mysql-test/suite/galera/t/mariadb_tzinfo_to_sql.test
          mysql-test/suite/galera/r/mariadb_tzinfo_to_sql.resultinfo_to_sql.test
      
      mysql-test/suite/galera/t/mariadb_tzinfo_to_sql.test
      mysql-test/suite/galera/r/mariadb_tzinfo_to_sql.result
      
      No test file nor test result file should be executable, so run chmod -x
      on them.
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the
      BSD-new license. I am contributing on behalf of my employer Amazon Web
      Services, Inc.
      8941bdc4
  5. 06 Oct, 2023 4 commits
  6. 04 Oct, 2023 2 commits
    • Vladislav Vaintroub's avatar
      MDEV-31095 tpool - do not create new worker, if thread creation is pending. · 9e62ab7a
      Vladislav Vaintroub authored
      Use an std::atomic_flag to track thread creation in progress.
      This is mainly a cleanup, the effect of this change was not measureable
      in my tests.
      9e62ab7a
    • Vladislav Vaintroub's avatar
      MDEV-31095 tpool - restrict threadpool concurrency during bufferpool load · e33e2fa9
      Vladislav Vaintroub authored
      Add threadpool functionality to restrict concurrency during "batch"
      periods (where tasks are added in rapid succession).
      This will throttle thread creation more agressively than usual, while
      keeping performance at least on-par.
      
      One of these cases is bufferpool load, where async read IOs are executed
      without any throttling. There can be as much as 650K read IOs for
      loading 10GB buffer pool.
      
      Another one is recovery, where "fake read" IOs are executed.
      
      Why there are more threads than we expect?
      Worker threads are not be recognized as idle, until they return to the
      standby list, and to return to that list, they need to acquire
      mutex currently held in the submit_task(). In those cases, submit_task()
      has no worker to wake, and would create threads until default concurrency
      level (2*ncpus) is satisfied. Only after that throttling would happen.
      e33e2fa9
  7. 03 Oct, 2023 9 commits
    • Michael Widenius's avatar
      MDEV-32164 Server crashes in JOIN::cleanup after erroneous query with view · 9ba8dc14
      Michael Widenius authored
      The problem was that we did not handle errors properly in
      JOIN::get_best_combination. In case an early error, JOIN->join_tab would
      contain unintialized values, which would cause errors on cleanup().
      
      The error in question was reported earlier, but not noticed until later.
      One cause of this is that most of the sql_select.cc code just checks
      thd->fatal_error and not thd->is_error().
      Fixed by changing of checks of fatal_error to is_error().
      9ba8dc14
    • Monty's avatar
      Change SEL_ARG::MAX_SEL_ARGS to a user defined variable optimizer_max_sel_args · d4347177
      Monty authored
      This allows a user to to change the default value of MAX_SEL_ARGS (16000)
      in the rare case where they neeed more generated SEL_ARGS (as part of
      the range optimizer)
      d4347177
    • Monty's avatar
      MDEV-32203 Raise notes when an index cannot be used on data type mismatch · 4e9322e2
      Monty authored
      Raise notes if indexes cannot be used:
      - in case of data type or collation mismatch (diferent error messages).
      - in case if a table field was replaced to something else
        (e.g. Item_func_conv_charset) during a condition rewrite.
      
      Added option to write warnings and notes to the slow query log for
      slow queries.
      
      New variables added/changed:
      
      - note_verbosity, with is a set of the following options:
        basic            - All old notes
        unusable_keys    - Print warnings about keys that cannot be used
                           for select, delete or update.
        explain          - Print unusable_keys warnings for EXPLAIN querys.
      
      The default is 'basic,explain'. This means that for old installations
      the only notable new behavior is that one will get notes about
      unusable keys when one does an EXPLAIN for a query. One can turn all
      of all notes by either setting note_verbosity to "" or setting sql_notes=0.
      
      - log_slow_verbosity has a new option 'warnings'. If this is set
        then warnings and notes generated are printed in the slow query log
        (up to log_slow_max_warnings times per statement).
      
      - log_slow_max_warnings   - Max number of warnings written to
                                  slow query log.
      
      Other things:
      - One can now use =ALL for any 'set' variable to set all options at once.
        For example using "note_verbosity=ALL" in a config file or
        "SET @@note_verbosity=ALL' in SQL.
      - mysqldump will in the future use @@note_verbosity=""' instead of
        @sql_notes=0 to disable notes.
      - Added "enum class Data_type_compatibility" and changing the return type
        of all Field::can_optimize*() methods from "bool" to this new data type.
      
      Reviewer & Co-author: Alexander Barkov <bar@mariadb.com>
      - The code that prints out the notes comes mainly from Alexander
      4e9322e2
    • Monty's avatar
      Give warnings if open_stat_table_for_ddl() fails · 4c8d2410
      Monty authored
      The warning is given in case of table not found or if there is a lock
      timeout. The warning is needed as in case of a lock timeout then the
      persistent table stats are going to be wrong.
      4c8d2410
    • Monty's avatar
      Change BUILD scripts to use with-ssl=system · 684f7f81
      Monty authored
      684f7f81
    • Monty's avatar
      Correction of recent PR in mroonga for 10.6 code · 5910bc1f
      Monty authored
      Updated ha_mroonga::storage_check_if_supported_inplace_alter to support
      new ALTER TABLE flags.
      
      This fixes failing tests:
      mroonga/storage.alter_table_add_index_unique_duplicated
      mroonga/storage.alter_table_add_index_unique_multiple_column_duplicated
      5910bc1f
    • Monty's avatar
      Changed some malloc() calls to my_malloc() · 8edef482
      Monty authored
      - hostnames in hostname_cache added
      - Some Galera (WSREP) allocations
      - Table caches
      8edef482
    • Monty's avatar
      Added Myisam, Aria and InnoDB buffer pool to @@memory_used status variable · c4a5bd1e
      Monty authored
      This makes it easier to see how much memory MariaDB server has allocated.
      (For all memory allocations that goes through mysys)
      c4a5bd1e
    • Monty's avatar
      MDEV-31957 Concurrent ALTER and ANALYZE collecting statistics can result in stale statistical data · e3b36b8f
      Monty authored
      Example of what causes the problem:
      T1: ANALYZE TABLE starts to collect statistics
      T2: ALTER TABLE starts by deleting statistics for all changed fields,
          then creates a temp table and copies data to it.
      T1: ANALYZE ends and writes to the statistics tables.
      T2: ALTER TABLE renames temp table in place of the old table.
      
      Now the statistics from analyze matches the old deleted tables.
      
      Fixed by waiting to delete old statistics until ALTER TABLE is
      the only one using the old table and ensure that rename of columns
      can handle swapping of column names.
      
      rename_columns_in_stat_table() (former rename_column_in_stat_tables())
      now takes a list of columns to rename. It uses the following algorithm
      to update column_stats to be able to handle circular renames
      
      - While there are columns to be renamed and it is the first loop or
        last rename loop did change something.
        - Loop over all columns to be renamed
          - Change column name in column_stat
            - If fail because of duplicate key
            - If this is first change attempt for this column
               - Change column name to a temporary column name
               - If there was a conflicting row, replace it with the current row.
          else
           - Remove entry from column list
      
      - Loop over all remaining columns in the list
       - Remove the conflicting row
       - Change column from temporary name to final name in column_stat
      
      Other things:
      - Don't flush tables for every operation. Only flush when all updates
        are done.
      - Rename of columns was not handled in case of ALGORITHM=copy (old bug).
        - Fixed that we do not collect statistics for hidden hash columns
          used by UNIQUE constraint on long values.
        - Fixed that we do not collect statistics for blob columns referred by
          generated virtual columns. This was achieved by storing the fields for
          which we want to have statistics in table->has_value_set instead of
          in table->read_set.
      - Rename of indexes was not handled for persistent statistics.
        - This is now handled similar as rename of columns. Renamed columns
          are now stored in 'rename_stat_indexes' and handled in
          Alter_info::delete_statistics() together with drooped indexes.
      - ALTER TABLE .. ADD INDEX may instead of creating a new index rename
        an existing generated foreign key index. This was not reflected in
        the index_stats table because this was handled in
        mysql_prepare_create_table instead instead of in the mysql_alter() code.
        Fixed by adding a call in mysql_prepare_create_table() to drop the
        changed index.
        I also had to change the code that 'marked the index' to be ignored
        with code that would not destroy the original index name.
      
      Reviewer: Sergei Petrunia <sergey@mariadb.com>
      e3b36b8f
  8. 29 Sep, 2023 1 commit
    • Andrei's avatar
      MDEV-32257 dangling XA-rollback in binlog from emtpy XA in pseudo_slave_mode · 388296a1
      Andrei authored
      In `pseudo_slave_mode=1` aka "psedo-slave" mode any prepared XA
      transaction disconnects from the user session, as if the user
      connection drops. The xid of such transaction remains in the server,
      and should the prepared transaction be read-only, it is marked.
      The marking makes sure that the following termination of the
      read-only transaction  ends up with ER_XA_RBROLLBACK.
      This did not take place actually for  `pseudo_slave_mode=1` read-only.
      
      Fixed with checking the read-only status of a prepared transaction
      at time it disconnects from the `pseudo_slave_mode=1` session, to mark
      its xid when that's the case.
      388296a1
  9. 27 Sep, 2023 2 commits
  10. 25 Sep, 2023 3 commits
  11. 24 Sep, 2023 1 commit
  12. 22 Sep, 2023 6 commits
    • Vladislav Vaintroub's avatar
      MDEV-32228 speedup opening tablespaces on Windows · 1ee0d09a
      Vladislav Vaintroub authored
      is_file_on_ssd() is more expensive than it should be.
      It caches the results by volume name, but still calls GetVolumePathName()
      every time, which, as procmon shows, opens multiple directories in
      filesystem hierarchy (db directory, datadir, and all ancestors)
      
      The fix is to cache SSD status by volume serial ID, which is cheap to
      retrieve with GetFileInformationByHandleEx()
      1ee0d09a
    • Vlad Lesin's avatar
      Merge 10.5 into 10.6. · d13a57ae
      Vlad Lesin authored
      d13a57ae
    • Oleksandr Byelkin's avatar
      MDEV-31742 incorrect examined rows in case of stored function usage · 89a493d6
      Oleksandr Byelkin authored
      The counter is global so we do not need add backup to it
      if we do not zero it after taking the backup.
      89a493d6
    • Oleksandr Byelkin's avatar
      MDEV-30820 slow log Rows_examined out of range · 2bf291ba
      Oleksandr Byelkin authored
      Fix row counters to be able to get any possible value.
      2bf291ba
    • Dmitry Shulga's avatar
      MDEV-31871: maria-install-db fails on MacOS · ddffae0a
      Dmitry Shulga authored
      Follow-up to fix issue with access to probably not-initialized mutex/cond_var
      
      Constructor of the class st_debug_sync_globals was changed to initialize
      the data members dsp_hits, dsp_executed, dsp_max_active with zero.
      Formerly, these data members were filled with zeroes by C-runtime since
      the variable debug_sync_global was declared as static and according with C rules
      the static variable initialized with zero bytes.
      
      By the same reason, the data members
        debug_sync_global->ds_mutex
        debug_sync_global->ds_cond
      were initialized by zeros before the patch for MDEV-31871. After this patch
      the memory for the synch primitives debug_sync_global->ds_mutex
      and debug_sync_global->ds_cond are initialized explicitly by calling
      the functions mysql_mutex_init/mysql_cond_init so access to these synch
      primitives should be done only after such initialization be completed.
      Guarded access to these synch primitives has been added to the function
      debug_sync_end_thread() that is called on clean up since that was single
      problem place detected by MSAN. Theoretically problem places located in the
      function debug_sync_execute were not protected with similar check since
      it is not obvious that the variables debug_sync_global->ds_mutex
      and debug_sync_global->ds_cond could be not initilialized for use cases where
      the function debug_sync_execute() is called. It is required additional study
      to conclude whether it does need or not.
      ddffae0a
    • Dmitry Shulga's avatar
      MDEV-31871: maria-install-db fails on MacOS · 54143350
      Dmitry Shulga authored
      mariadb-install crashes on start when the static variable debug_sync_global
      of the class st_debug_sync_globals is initialized by constructor.
      
      Definition of the class st_debug_sync_globals has a data member of the type
      Hash_set whose implementation depends on thread-specific data associated
      with the key THD_KEY_mysys. This dependency results from constructor of
      the class Hash_set that runs my_hash_init2() which in turn invokes my_malloc.
      The thread-specific data value associated with the key THD_KEY_mysys is used
      by the function sf_malloc to get id of the current thread. The key
      THD_KEY_mysys is defined as static variable at my_thr_init.c initialized
      with the value -1. Proper initialization of the key THD_KEY_mysys is done
      with the library call pthread_key_create but it happens at the  my_init()
      that called much later after the first time the THD_KEY_mysys() has been
      invoked. In according with Single Unix Specification, the effect of calling
      pthread_setspecific() or pthread_getspecific() with a key value not obtained
      from pthread_key_create() is undefined. That is the reason why mariadb-install
      crashes on MacOS.
      
      To fix the issue, the static variable debug_sync_global is converted to
      a pointer to the class st_debug_sync_globals and its instantiation is done
      explicitly at the function debug_sync_init() that is called at right time.
      
      This is the follow-up patch to the commits
        8885225d
        f6ecadfe
      where was introduced a statically instantiated object debug_sync_global of
      the structure st_debug_sync_globals and the key THR_KEY_mysys for this
      thread-specific data was initialized with the value -1.
      54143350
  13. 21 Sep, 2023 1 commit
    • Vlad Lesin's avatar
      MDEV-30165 X-lock on supremum for prepared transaction for RR · 95730372
      Vlad Lesin authored
      trx_t::set_skip_lock_inheritance() must be invoked at the very beginning
      of lock_release_on_prepare(). Currently  trx_t::set_skip_lock_inheritance()
      is invoked at the end of lock_release_on_prepare() when lock_sys and trx
      are released, and there can be a case when locks on prepare are released,
      but "not inherit gap locks" bit has not yet been set, and page split
      inherits lock to supremum.
      
      Also reset supremum bit and rebuild waiting queue when XA is prepared.
      
      Reviewed by: Marko Mäkelä
      95730372
  14. 20 Sep, 2023 2 commits