MariaDB 13.1 preview available

We are pleased to announce the availability of a preview of the MariaDB 13.1 series. MariaDB 13.1 will be a rolling release.

MariaDB 13.1 introduces a lot of new features. Many of them were implemented by our awesome community contributors. See the complete list below:

  • DENY clause for access control a.k.a. “negative grants” (MDEV-14443)
  • Auto-adding new partitions for PARTITION BY RANGE (MDEV-15621)
  • Locking full table scan fails to use table-level locking (MDEV-24813)
  • The default utf8 character set is now utf8mb4 (MDEV-30041)
  • NEW and OLD in a trigger can be used as row variables (MDEV-34723)
  • ADAPTIVE_HASH_INDEX = { YES | NO | DEFAULT } can specify per InnoDB table whether to use AHI (MDEV-37070)
  • XMLISVALID() schema validation function (MDEV-37262)
  • Adaptive hash index statistics is shown in ANALYZE FORMAT=JSON (MDEV-38305)
  • Optimizer Context Recorder to record the optimizer data and then analyze query optimization on another server instance (MDEV-38701)
  • innodb_tablespace_size_warning_threshold and innodb_tablespace_size_warning_pct variables to get a warning when InnoDB tablespace is getting close to full (before it’s 100% full and the service is disrupted) (MDEV-38936)
  • Local routine variables usable in PREPARE/EXECUTE/DEALLOCATE and OPEN …

MariaDB Vector in Laravel: insights on choosing an embedding model

laravel-mariadb-vector is an open-source project by Erik Ros, bringing MariaDB’s native vector search to Laravel’s Eloquent ORM. In his guest post, Erik shares how it works, and his insights about picking an embedding model.

I maintain laravel-mariadb-vector, a small open source package that brings MariaDB’s native vector search to Laravel’s Eloquent ORM. It’s my first open source project, it has over 100 installs, no marketing budget, and it exists because I needed it.

This post is a quick introduction and an experiment with 2,942 job titles in English and Dutch that shows why the embedding model you pick and how you use it matters far more than you might expect.

MariaDB + DuckDB: A New Playground for Analytics – A First Look at the New Storage Engine

MariaDB just announced it has learned to quack: the new DuckDB storage engine has joined the large family of storage engines in MariaDB Server.

The idea is very interesting: use MariaDB Server as usual, but create some tables using ENGINE=DuckDB and benefit from DuckDB’s columnar storage and vectorized execution for analytical queries.

In other words, we can keep our transactional workload in InnoDB, and use DuckDB tables for analytics… in the same MariaDB instance. Not a new concept, but a new and powerful implementation!

This is, of course, not something I would recommend for production today;

DuckDB Storage Engine for MariaDB. When the Sea Lion Learns to Quack.

An early look at the DuckDB storage engine for MariaDB — columnar, vectorized analytics that live right next to your transactional tables.

The problem

MariaDB’s InnoDB is excellent at what it was built for: transactions. Row-by-row inserts, updates, point lookups, strong consistency. But the moment you ask it to scan tens of millions of rows for a multi-way join with a few aggregations, a row store has to work hard.

The usual answer is to stand up a separate analytical system, then build ETL pipelines to copy data into it.

The Power Of The Community!

Inspired by some recent LinkedIn posts, I decided to take the AI in my own hands and do some stats on the MariaDB and MySQL repositories.

This graph is what I’ve got.

Not only have MariaDB Server distinct contributors surpassed the distinct MySQL Server contributors count! The External MariaDB contributors alone did! *

This is how the Power Of the Community looks like!

  • You get to use a more functional, performant and error free MariaDB Server
  • ⁠⁠You get a say in shaping the future of the MariaDB Server.

MariaDB Foundation: Bringing TPC-B Back To Life

When I joined Pervasive PSQL, one of the first performance test cases I was introduced to was TPC-B. It was already implemented inside Pervasive PSQL and it quickly became one of the most important tools in my daily work. A little later, another developer and I wrote the Pervasive PSQL’s TPC-C implementation in C++. Between those two workloads, and a few others, I spent nearly five years performing change testing. (https://en.wikipedia.org/wiki/Pervasive_Software)

During that time, about seventy percent of all regressions came from TPC-B, with the remaining issues coming from ATOMICs and TPC-C.

Virtuozzo Renews Sponsorship of MariaDB Foundation

We are delighted to announce that Virtuozzo has renewed its sponsorship of MariaDB Foundation.

Virtuozzo has been a long-standing supporter of open infrastructure, service providers, and cloud platforms, and we are very pleased to continue strengthening our collaboration.

At MariaDB Foundation, sponsorship is not only about financial support. It is also about building useful, practical ecosystem work around MariaDB Server together with organizations that care about open technology, reliable infrastructure, and long-term user choice.

With Virtuozzo, we see strong alignment around open cloud infrastructure, database performance, operational reliability, and practical deployment models for service providers, SaaS platforms, and enterprise environments. 

Vibe-coding an Audit Plugin in Under 3 Minutes

Who says developing MariaDB plugins is hard? I was able to produce one in under 3 minutes!

I of course did it by asking Grok nicely:

The produced result is actually very decent:

/*
errorwatch.c – MariaDB Audit API plugin

Records statement execution errors into a dedicated log file.

This plugin subscribes to the GENERAL audit class and logs
events of type MYSQL_AUDIT_GENERAL_ERROR (and STATUS events
that carry a non-zero error code). It writes structured
entries to /var/log/mariadb/errorwatch.log (or /tmp/ fallback).

To build (inside MariaDB source tree):
1. Copy this file and CMakeLists.txt to plugin/errorwatch/
2. …