1. 19 Nov, 2023 1 commit
  2. 14 Nov, 2023 3 commits
  3. 08 Nov, 2023 10 commits
  4. 07 Nov, 2023 1 commit
  5. 06 Nov, 2023 1 commit
  6. 04 Nov, 2023 3 commits
    • Marko Mäkelä's avatar
      MDEV-31826: File handle leak on failed IMPORT TABLESPACE · 1fc2843e
      Marko Mäkelä authored
      fil_space_t::drop(): If the caller is not interested in a
      detached handle, close it immediately.
      1fc2843e
    • Nikita Malyavin's avatar
      f7646d89
    • Nikita Malyavin's avatar
      MDEV-32444 Data from orphaned XA transaction is lost after online alter · 23f9e342
      Nikita Malyavin authored
      XA support for online alter was totally missing.
      
      Tying on binlog_hton made this hardly visible: simply having binlog_commit
      called from xa_commit made an impression that it will automagically work
      for online alter, which turns out wrong: all binlog does is writes
      "XA END" into trx cache and flushes it to a real binlog.
      
      In comparison, online alter can't do the same, since online replication
      happens in a single transaction.
      
      Solution: make a dedicated XA support.
      * Extend struct xid_t with a pointer to Online_alter_cache_list
      * On prepare: move online alter cache from THD::ha_data to XID passed
      * On XA commit/rollback: use the online alter cache stored in this XID.
        This makes us pass xid_cache_element->xid to xa_commit/xa_rollback
        instead of lex->xid
      * Use manual memory management for online alter cache list, instead of
        mem_root allocation, since we don't have mem_root connected to the XA
        transaction.
      23f9e342
  7. 02 Nov, 2023 8 commits
    • Nikita Malyavin's avatar
      online alter: rework savepoints · a569515a
      Nikita Malyavin authored
      Use standard handlerton functions for savepoint add/rollback.
      
      To identify the savepoint, the pointer passed is used.
      
      Every table that has online alter in progress maintains a list of
      savepoints independently.
      
      Also this removes setting a value to a global variable savepoint_alloc_size
      without any protection, which was a race condition bug.
      a569515a
    • Nikita Malyavin's avatar
      8311eae6
    • Nikita Malyavin's avatar
      online alter: extract the source to a separate file · cb521746
      Nikita Malyavin authored
      Move all the functions dedicated to online alter to a newly created
      online_alter.cc.
      
      With that, make many functions static and simplify the static functions
      naming.
      
      Also, rename binlog_log_row_online_alter -> online_alter_log_row.
      cb521746
    • Nikita Malyavin's avatar
      MDEV-32126 Assertion fails upon online ALTER and binary log enabled · 830bdfcc
      Nikita Malyavin authored
      Assertion `!writer.checksum_len || writer.remains == 0' fails upon
      concurrent online ALTER and transactions with failing statements and binary
      log enabled.
      Also another assertion, `pos != (~(my_off_t) 0)', fails in my_seek, upon
      reinit_io_cache, on a simplified test. This means that IO_CACHE wasn't
      properly initialized, or had an error before.
      
      The overall problem is a deep interference with the effect of an installed
      binlog_hton: the assumption about that thd->binlog_get_cache_mngr() is,
      sufficiently, NULL, when we shouldn't run the binlog part of
      binlog_commit/binlog_rollback, is wrong: as turns out, sometimes the binlog
      handlerton can be not installed in current thd, but binlog_commit can be
      called on behalf of binlog, as in the bug reported.
      
      One separate condition found is XA recovery of the orphaned transaction,
      when binlog_commit is also called, but it has nothing to do with
      online alter.
      
      Solution:
      Extract online alter operations into a separate handlerton.
      830bdfcc
    • Nikita Malyavin's avatar
      binlog_cache_data: add more consts · a1019e93
      Nikita Malyavin authored
      a1019e93
    • Nikita Malyavin's avatar
      MDEV-32100 Online ALTER TABLE ends with 1032 under some isolation levels · 46ee272a
      Nikita Malyavin authored
      1032 (Can't find record) could be emitted when ALTER TABLE is execued vs
      concurrent DELETE/UPDATE/other DML that would require search on the online
      ALTER's side.
      
      Innodb's INPLACE, in comparison, creates a new trx_t and uses it in scope
      of the alter table context.
      
      ALTER TABLE class of statements (i.g. CREATE INDEX, OPTIMIZE, etc.) is
      expected to be unaffected by the value of current session's transaction
      isolation.
      
      This patch save-and-restores thd->tx_isolation and sets in to
      ISO_REPEATABLE_READ for almost a whole mysql_alter_table duration, to avoid
      any possible side-effect of it. This should be primarily done before the
      lock_tables call, to initialize the storage engine's local value correctly
      during the store_lock() call.
      
      sql_table.cc: set thd->tx_isolation to ISO_REPEATABLE_READ in
      mysql_alter_table and then restore it to the original value in the end of
      the call.
      46ee272a
    • Rucha Deodhar's avatar
      MDEV-31411: JSON_ARRAY_INTERSECT/JSON_OBJECT_FILTER_KEYS should fetch · 5c5123df
      Rucha Deodhar authored
      data from a table similar to other JSON functions
      
      Analysis:
      Since we are fetching values for every row ( because we are running SELECT
      for all rows of a table ), correct value can be only obtained at the time of
      calling val_int() because it is called to get value for each row.
      Fix:
      Set up hash for each row instead of doing it during fixing fields.
      5c5123df
    • Oleg Smirnov's avatar
      MDEV-32382 FederatedX error on pushdown of statements having CTE · 855356ca
      Oleg Smirnov authored
      Pushing down statements to FederatedX engine is implemented by
      printing either SELECT_LEX or SELECT_LEX_UNIT into a string and
      sending that string to the engine. In the case of pushing down a
      single SELECT having a CTE (WITH clause) there was a problem, because
      normally single SELECTs were printed using SELECT_LEX::print().
      But CTEs are stored in the upper unit of the SELECT_LEX -
      SELECT_LEX_UNIT, so they were not unfolded in the string produced.
      
      The solution is to invoke SELECT_LEX_UNIT::print() when pushing down
      single SELECT statements (but not those which are parts of units),
      so the possible CTEs are unfolded and printed.
      
      Reviewed by Sergei Petrunia (sergey@mariadb.com)
      855356ca
  8. 01 Nov, 2023 1 commit
  9. 31 Oct, 2023 1 commit
  10. 30 Oct, 2023 4 commits
  11. 28 Oct, 2023 3 commits
  12. 27 Oct, 2023 4 commits
    • Oleksandr Byelkin's avatar
      1cd8a5ef
    • Sergei Petrunia's avatar
      MDEV-32351: Significant slowdown with outer joins: Test coverage · 9bf2e5e3
      Sergei Petrunia authored
      Make ANALYZE FORMAT=JSON print block-nl-join.r_unpack_ops when
      analyze_print_r_unpack_ops debug flag is set.
      
      Then, add a testcase.
      9bf2e5e3
    • Sergei Petrunia's avatar
      ANALYZE FORMAT=JSON: Backport block-nl-join.r_unpack_time_ms from 11.0 +fix MDEV-30830. · 4ed59006
      Sergei Petrunia authored
      Also fix it to work with hashed join (MDEV-30830).
      
      Reviewed by: Monty <monty@mariadb.org>
      4ed59006
    • Igor Babaev's avatar
      MDEV-32351 Significant slowdown for query with many outer joins · 954a6dec
      Igor Babaev authored
      This patch fixes a performance regression introduced in the patch for the
      bug MDEV-21104. The performance regression could affect queries for which
      join buffer was used for an outer join such that its on expression from
      which a conjunctive condition depended only on outer tables can be
      extracted. If the number of records in the join buffer for which this
      condition was false greatly exceeded the number of other records the
      slowdown could be significant.
      
      If there is a conjunctive condition extracted from the ON expression
      depending only on outer tables this condition is evaluated when interesting
      fields of each survived record of outer tables are put into the join buffer.
      Each such set of fields for any join operation is supplied with a match
      flag field used to generate null complemented rows. If the result of the
      evaluation of the condition is false the flag is set to MATCH_IMPOSSIBLE.
      When looking in the join buffer for records matching a record of the
      right operand of the outer join operation the records with such flags
      are not needed to be unpacked into record buffers for evaluation of on
      expressions.
      
      The patch for MDEV-21104 fixing some problem of wrong results when
      'not exists' optimization by mistake broke the code that allowed to
      ignore records with the match flag set to MATCH_IMPOSSIBLE when looking
      for matching records. As a result such records were unpacked for each
      record of the right operand of the outer join operation. This caused
      significant execution penalty in some cases.
      
      One of the test cases added in the patch can be used only for demonstration
      of the restored performance for the reported query. The second test case is
      needed to demonstrate the validity of the fix.
      954a6dec