MariaDB server is a community developed fork of MySQL server. Started by core members of the original MySQL team, MariaDB actively works with outside developers to deliver the most featureful, stable, and sanely licensed open SQL server in the industry.
Find a file
Sergey Vojtovich b88a298f2d MDEV-19749 - MDL scalability regression after backup locks
Statements that intend to modify data have to acquire protection
against ongoing backup. Prior to backup locks, protection against
FTWRL was acquired in form of 2 shared metadata locks of GLOBAL
(global read lock) and COMMIT namespaces. These two namespaces
were separate entities, they didn't share data structures and
locking primitives. And thus they were separate contention
points.

With backup locks, introduced by 7a9dfdd, these namespaces were
combined into a single BACKUP namespace. It became a single
contention point, which doubled load on BACKUP namespace data
structures and locking primitives compared to GLOBAL and COMMIT
namespaces. In other words system throughput has halved.

MDL fast lanes solve this problem by allowing multiple contention
points for single MDL_lock. Fast lane is scalable multi-instance
registry for leightweight locks. Internally it is just a list of
granted tickets, close counter and a mutex.

Number of fast lanes (or contention points) is defined by the
metadata_locks_instances system variable. Value of 1 disables fast
lanes and lock requests are served by conventional MDL_lock data
structures.

Since fast lanes allow arbitrary number of contention points, they
outperform pre-backup locks GLOBAL and COMMIT.

Fast lanes are enabled only for BACKUP namespace. Support for other
namespaces is to be implemented separately.

Lock types are divided in 2 categories: lightweight and heavyweight.

Lightweight lock types represent DML: MDL_BACKUP_DML,
MDL_BACKUP_TRANS_DML, MDL_BACKUP_SYS_DML, MDL_BACKUP_DDL,
MDL_BACKUP_ALTER_COPY, MDL_BACKUP_COMMIT. They are fully compatible
with each other. Normally served by corresponding fast lane, which is
determined by thread_id % metadata_locks_instances.

Heavyweight lock types represent ongoing backup: MDL_BACKUP_START,
MDL_BACKUP_FLUSH, MDL_BACKUP_WAIT_FLUSH, MDL_BACKUP_WAIT_DDL,
MDL_BACKUP_WAIT_COMMIT, MDL_BACKUP_FTWRL1, MDL_BACKUP_FTWRL2,
MDL_BACKUP_BLOCK_DDL. These locks are always served by conventional
MDL_lock data structures. Whenever such lock is requested, fast
lanes are closed and all tickets registered in fast lanes are
moved to conventional MDL_lock data structures. Until such locks
are released or aborted, lightweight lock requests are served by
conventional MDL_lock data structures.

Strictly speaking moving tickets from fast lanes to conventional
MDL_lock data structures is not required. But it allows to reduce
complexity and keep intact methods like: MDL_lock::visit_subgraph(),
MDL_lock::notify_conflicting_locks(), MDL_lock::reschedule_waiters(),
MDL_lock::can_grant_lock().

It is not even required to register tickets in fast lanes. They
can be implemented basing on an atomic variable that holds two
counters: granted lightweight locks and granted/waiting heavyweight
locks. Similarly to MySQL solution, which roughly speaking has
"single atomic fast lane". However it appears to be it won't bring
any better performance, while code complexity is going to be much
higher.
2025-10-01 14:05:17 +00:00
.github Merge branch '11.4' into 11.8 2025-06-18 07:43:24 +02:00
BUILD Fixed compiler issues when compiling with UBSAN 2025-09-04 18:08:38 +03:00
client Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
cmake Merge 11.4 into 11.8 2025-10-01 10:32:47 +03:00
dbug Reënable ATTRIBUTE_FORMAT on DBUG_PRINT & t/eprint 2025-02-12 10:17:44 +01:00
debian Merge 11.4 into 11.8 2025-10-01 10:32:47 +03:00
Docs Fixed some typos in optimizer_costs.txt 2023-03-28 18:41:09 +11:00
extra MDEV-24 Segmented key cache for Aria 2025-10-01 14:05:10 +00:00
include Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
libmariadb@b790c6c149 Connector/C 3.4.7 2025-07-27 15:44:07 +02:00
libmysqld Merge branch '11.4' into 11.8 2025-07-28 21:29:29 +02:00
libservices Merge 10.6 into 10.11 2024-02-08 15:04:46 +02:00
man Update 11.8 man pages 2025-04-29 10:42:46 +10:00
mysql-test MDEV-19749 - MDL scalability regression after backup locks 2025-10-01 14:05:17 +00:00
mysys Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
mysys_ssl Merge branch '11.4' into 11.7 2025-02-06 16:46:36 +01:00
plugin MDL_lock encapsulation: MDL_lock::get_key() 2025-10-01 14:05:17 +00:00
randgen/conf Group commit for maria engine. 2010-02-12 15:12:28 +02:00
scripts Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
sql MDEV-19749 - MDL scalability regression after backup locks 2025-10-01 14:05:17 +00:00
sql-bench Updated sql-bench to run with PostgreSQL 14.9 2023-09-09 15:14:45 +03:00
sql-common Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
storage MDEV-24 Segmented key cache for Aria 2025-10-01 14:05:10 +00:00
strings Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
support-files Merge branch '11.4' into 11.8 2025-07-28 21:29:29 +02:00
tests Merge remote-tracking branch 'github/bb-11.4-release' into bb-11.8-serg 2025-04-27 19:40:00 +02:00
tpool Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
unittest Merge 11.4 into 11.8 2025-09-29 18:25:09 +03:00
vio Merge branch '10.11' into 11.4 2025-06-17 09:50:22 +02:00
win Merge branch '11.4' into 11.8 2025-07-28 21:29:29 +02:00
wsrep-lib@14ce8cab76 galera: wsrep-lib submodule update 2025-08-13 17:53:56 +02:00
zlib Merge branch 'merge-zlib' (1.3.1) into 10.4 2024-04-26 13:50:03 +02:00
.clang-format Remove duplicate key "Language" from .clang-format 2024-04-17 16:52:37 +02:00
.gitattributes Merge branch '10.5' into 10.6 2022-02-03 17:01:31 +01:00
.gitignore Merge branch '11.4' into 11.8 2025-06-18 07:43:24 +02:00
.gitlab-ci.yml All-green GitLab CI in main branch in January 2025 2025-01-29 10:56:08 +11:00
.gitmodules Merge remote-tracking branch '10.4' into 10.5 2023-03-31 21:32:41 +02:00
appveyor.yml Merge remote-tracking branch 'github/bb-11.4-release' into bb-11.8-serg 2025-04-27 19:40:00 +02:00
BUILD-CMAKE Minor spelling fixes in code comments, docs and output 2018-01-12 16:49:02 +02:00
CMakeLists.txt Merge branch '11.4' into 11.8 2025-07-28 21:29:29 +02:00
CODING_STANDARDS.md MDEV-35837: Update CODING_STANDARDS to C++17 [skip ci] 2025-04-29 13:55:22 +10:00
config.h.cmake Merge branch '11.4' into 11.8 2025-07-28 21:29:29 +02:00
configure.cmake Merge branch '11.6' into 11.7 2024-11-10 19:22:21 +01:00
CONTRIBUTING.md Add CODING_STANDARDS.md file 2023-02-03 15:47:17 +11:00
COPYING Update FSF Address 2019-05-11 21:29:06 +03:00
CREDITS Update sponsors 2024-08-12 09:32:30 +01:00
INSTALL-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
INSTALL-WIN-SOURCE Update AskMonty and Atlassian references to MariaDB 2016-03-08 15:24:01 +02:00
KNOWN_BUGS.txt Changed some MySQL names in messages to MariaDB 2018-12-09 20:49:05 +02:00
README.md Merge branch '10.11' into 11.1 2024-05-31 10:54:31 +10:00
SECURITY.md Create SECURITY.md 2023-06-05 08:28:06 +10:00
THIRDPARTY Merge branch '10.6' into 10.11 2024-02-01 18:36:14 +01:00
VERSION bump the VERSION 2025-08-06 17:23:45 -04:00

Code status:

  • Appveyor CI status ci.appveyor.com

MariaDB: The innovative open source database

MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.

MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.

MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.

MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.

A description of the MariaDB project and a manual can be found at:

https://mariadb.org

https://mariadb.com/kb/en/

https://mariadb.com/kb/en/mariadb-vs-mysql-features/

https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/

https://mariadb.com/kb/en/new-and-old-releases/

Getting the code, building it and testing it

Refer to the following guide: https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/ which outlines how to build the source code correctly and run the MariaDB testing framework, as well as which branch to target for your contributions.

Help

More help is available from the Maria Discuss mailing list https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ and MariaDB's Zulip instance, https://mariadb.zulipchat.com/

Licensing


MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.

License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.


Bug Reports

Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org

For reporting security vulnerabilities, see our security-policy.

The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server