> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/release-notes/community-server/13.0/mariadb-13.0-changes-and-improvements.md).

# MariaDB 13.0 Changes & Improvements

An overview of changes, improvements, and what's new in MariaDB Community Server 13.0

{% hint style="info" %}

<p align="center">The most recent release of MariaDB Community Server 13.0 is: <a href="/docs/release-notes/community-server/13.0/13.0.2.md"><strong>13.0.2</strong></a> Stable (GA)</p>

<p align="center"><a href="https://mariadb.com/downloads" class="button primary">Download Community Server 13.0.2</a></p>

<p align="center"><a href="https://downloads.mariadb.org/mariadb/13.0.2/"><sub><em>Alternate download from mariadb.org</em></sub></a></p>
{% endhint %}

MariaDB 13.0 is a [rolling release](/docs/release-notes/community-server/about/release-model.md). It is an evolution of [MariaDB 12.3](/docs/release-notes/community-server/12.3/mariadb-12.3-changes-and-improvements.md) with several entirely new features.

## New Features

* Add support for [`TYPE .. IS REF CURSOR`](/docs/server/reference/sql-statements/programmatic-compound-statements/declare-type.md#ref-cursor-types) ([MDEV-10152](https://jira.mariadb.org/browse/MDEV-10152))
  * In 13.0, `REF CURSOR` can be declared inside package routines and in a `PACKAGE BODY`, and used as a package routine local variable, package routine parameter, or package function `RETURN` type. It cannot yet be used as a parameter or `RETURN` type for global (non-package) routines.
* Support [`RECORD`](/docs/server/reference/sql-statements/programmatic-compound-statements/declare-type.md#record-types) in routine parameters and function `RETURN` clause ([MDEV-38768](https://jira.mariadb.org/browse/MDEV-38768))
  * Same scope as `REF CURSOR` above: usable as a package routine parameter or package function `RETURN` type, not yet as a parameter or `RETURN` type for global (non-package) routines.
* Add [`init_rpl_role`](/docs/server/ha-and-performance/standard-replication/replication-and-binary-log-system-variables.md#init_rpl_role) to `SHOW VARIABLES` output ([MDEV-38202](https://jira.mariadb.org/browse/MDEV-38202))
  * The replication role set via the `--init-rpl-role` startup option can now be queried with `SHOW VARIABLES LIKE 'init_rpl_role'` or `SELECT @@init_rpl_role`, instead of only being visible in the server's configuration file.
* One can specify [timestamp format for the audit plugin log](/docs/server/reference/plugins/mariadb-audit-plugin/mariadb-audit-plugin-log-format.md) ([MDEV-18386](https://jira.mariadb.org/browse/MDEV-18386))
* Atomic [`CREATE OR REPLACE TABLE`](/docs/server/server-usage/tables/create-table.md#create-or-replace) ([MDEV-25292](https://jira.mariadb.org/browse/MDEV-25292))
* Implement [`UPDATE ... RETURNING`](/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/update.md#single-table-with-returning-clause) for single-table updates ([MDEV-5092](https://jira.mariadb.org/browse/MDEV-5092))
  * Combined with [`OLD_VALUE()`](/docs/server/reference/sql-functions/secondary-functions/miscellaneous-functions/old-value.md), an application can read back both the pre- and post-update values of changed columns in one round trip, without a separate `SELECT`. Only single-table `UPDATE` supports `RETURNING`; multi-table `UPDATE` does not yet.
* [`INFORMATION_SCHEMA.SYSTEM_VARIABLES`](/docs/server/reference/system-tables/information-schema/information-schema-tables/information-schema-system_variables-table.md) shows if a variable is deprecated ([MDEV-35369](https://jira.mariadb.org/browse/MDEV-35369))
  * Adds `IS_DEPRECATED` and `DEPRECATED_REPLACEMENT` columns, so tooling can query deprecation status directly instead of relying on release notes.
* [`INFORMATION_SCHEMA.STATISTICS`](/docs/server/reference/system-tables/information-schema/information-schema-tables/information-schema-statistics-table.md) and [`INFORMATION_SCHEMA.COLUMNS`](/docs/server/reference/system-tables/information-schema/information-schema-tables/information-schema-columns-table.md) shows engine specific create options ([MDEV-36444](https://jira.mariadb.org/browse/MDEV-36444))
* [Optimizer Trace](/docs/server/ha-and-performance/optimization-and-tuning/query-optimizer/optimizer-trace.md) includes used optimizer statistics ([MDEV-36511](https://jira.mariadb.org/browse/MDEV-36511))
* New [`innodb_log_archive`](/docs/server/server-usage/storage-engines/innodb/innodb-system-variables.md#innodb_log_archive) variable makes InnoDB preserve the write-ahead log in a continuous sequence of files instead of overwriting a ring buffer, enabling point-in-time recovery and incremental backups ([MDEV-37949](https://jira.mariadb.org/browse/MDEV-37949))
  * [`mariadb-backup`](/docs/server/server-usage/backup-and-restore/mariadb-backup.md) does not yet support the `innodb_log_archive=ON` log format, and fails if run against a server running with it enabled. See [InnoDB Log Archiving and Point-in-Time Recovery](/docs/server/server-usage/backup-and-restore/innodb-log-archive-pitr.md) for the manual procedure in the meantime.
* New [`QB_NAME()` optimizer hint](/docs/server/ha-and-performance/optimization-and-tuning/optimizer-hints/query-block-naming.md) ([MDEV-38045](https://jira.mariadb.org/browse/MDEV-38045))
  * Every view, CTE, and derived table now automatically gets an [implicit query block name based on its own alias](/docs/server/ha-and-performance/optimization-and-tuning/optimizer-hints/query-block-naming.md#implicit-names-based-on-aliases), so hints can target objects inside them without adding an explicit `QB_NAME()` hint first.
  * A new [locator form of `QB_NAME()`](/docs/server/ha-and-performance/optimization-and-tuning/optimizer-hints/query-block-naming.md#explicit-query-block-names-with-path), `QB_NAME(name, query_block_path)`, lets a hint specify a path to a query block nested inside a view, CTE, or derived table that isn't reachable by its implicit or explicit name alone.
* Reversed [executable comments](/docs/server/reference/sql-statements/comment-syntax.md#executable-comments) ([MDEV-7381](https://jira.mariadb.org/browse/MDEV-7381))

## Notable Items

* [`CHANGE MASTER`](/docs/server/reference/sql-statements/administrative-sql-statements/replication-statements/change-master-to.md) now resets `Master_Server_Id` in `SHOW SLAVES STATUS` ([MDEV-15327](https://jira.mariadb.org/browse/MDEV-15327))
* Faster unique indexes over [`CHAR`](/docs/server/reference/data-types/string-data-types/char.md) columns in MEMORY tables (incl. temporary tables) ([MDEV-21543](https://jira.mariadb.org/browse/MDEV-21543))
* [`PERFORMANCE_SCHEMA`](/docs/server/server-usage/storage-engines/performance_schema-storage-engine.md) now uses `XXH3_128` hash for digest. Looks like MD5, but much faster and no problems in FIPS mode. ([MDEV-31669](https://jira.mariadb.org/browse/MDEV-31669))
* [`binlog_row_event_max_size`](/docs/server/ha-and-performance/standard-replication/replication-and-binary-log-system-variables.md#binlog_row_event_max_size) default value was increased to 64k ([MDEV-37608](https://jira.mariadb.org/browse/MDEV-37608))
* [`default_master_connection`](/docs/server/ha-and-performance/standard-replication/replication-and-binary-log-system-variables.md#default_master_connection) can now be set on global level ([MDEV-9247](https://jira.mariadb.org/browse/MDEV-9247))

<sub>*This page is licensed: CC BY-SA / Gnu FDL*</sub>

{% @marketo/form formid="4316" formId="4316" %}
