MariaDB 10 is nearing GA, and it makes sense to make sure that the test suite from MySQL 5.6 is merged into MariaDB 10. Svoj is doing a lot of this work, and then we like to look at features, especially ones that are deprecated upstream. We don’t do that on blogs, but on the maria-developers mailing list.

I bring to your attention: Intermediate status for test cases merge. We see that INSERT DELAYED and SHOW PROFILE for example are deprecated in MySQL 5.6. The only way for feedback to the MySQL team seems to be comments on Morgan’s blog. However with MariaDB, especially with the feedback plugin enabled, we have an additional layer of information besides just comments on a blog or mailing list. 

We see from the features being used, INSERT DELAYED and SHOW PROFILE are still being used. The rest of the thread is an interesting read, as for example we should probably follow 5.6 in making NO_ENGINE_SUBSTITUTION to be the default. Also if you’re interested in the reason behind YEAR(2) existing, there is reasoning to why it exists.

The list continues. If you’re interested in MariaDB development, please ensure that you’re subscribed to the maria-developers mailing list, and if you’re a user, please consider enabling the user feedback plugin.

First, congratulations Oracle on the GA of MySQL 5.6! Well done!

In this post I walkthrough the features of the first two alpha versions of MariaDB 10.0. The first, 10.0.0-alpha, which was made available in November, and 10.0.1-alpha that saw daylight yesterday. I will go through the features by placing them in the following categories:

  • MariaDB 10.0-only Features (features that aren’t in MySQL 5.6)
  • MariaDB 10.0 Merged Features (features merged from MySQL 5.6)
  • MariaDB 10.0 Reimplemented Features (features reimplemented from features in MySQL 5.6)
  • MariaDB 5.x Features now in MySQL 5.6 (features introduced in earlier MariaDB versions which have now been introduced in MySQL 5.6)
  • MariaDB 5.x Features Backported from MySQL 5.6 (features introduced in earlier MariaDB versions which were backports of features from MySQL 5.6 development versions)

Some of the features will have links to the MySQL manual for the documentation Oracle has made available on the feature.

MariaDB 10.0-only Features

Features in this section are unique to MariaDB 10.0 and aren’t found in MySQL 5.6.

Available since 10.0.0
  • Multi-source replication (MDEV-253)
    • Multi-source replication is a longtime wish of many users. In scenarios where you partition your data over many masters you can then replicate the data from all masters onto one slave. Typical use cases are:
      • Data partitioned over many masters can be pulled together onto one slave for analytical queries
      • Many masters can replicate to the same slave and a complete backup can be done on the slave
      • Newer hardware usually provides more performance. Usually all hardware isn’t upgraded at once and multi-source can be used for replicating many masters to a powerful new slave.
    • Original code from Taobao
  • Even faster Group Commit
    • Further enhancements have been made to group commit. A couple of blog posts about the improvements by the developer, Kristian Nielsen, can be found here.
  • SHOW EXPLAIN
    • Get the query plan of a running statement.
Now available in 10.0.1
  • Cassandra Storage Engine
    • An integration of the NoSQL database Apache Cassandra. Cassandra is seen as a storage engine to MariaDB. The integration enables:
      • Combining data from Cassandra and MariaDB
      • Reading and writing to Cassandra from MariaDB. SQL’s SELECT, INSERT, UPDATE and DELETE all work.
  • Engine independent statistics
    • Optimizer statistics is the collection of data that describe more details about the database and the objects in the database.
    • Statistics are now provided separately from storage engines. Before, statistics were supplied by the storage engines themselves and the quality of the statistics were usually quite poor. Also, since before this they were provided through the storage engine interface, a lot of restrictions were put on them.
    • These statistics are used by the query optimizer to choose the best execution plan for each SQL statement. Better statistics results in better execution plans and end users will experience faster results in general.
    • Statistics are collected also for non-indexed columns. InnoDB’s statistics, for example, were previously only for indexes.
  • Improved Dynamic Columns
    • Dynamic Columns has been in MariaDB for a while already. This feature allows you to store a different set of columns for every row in a table. In that manner Dynamic Columns can be called NoSQL-like.
    • Since MariaDB introduced Dynamic Columns there has been user feedback and research going on to improve it further. Dynamic Columns has some new capabilities that now are in mainline MariaDB:
      • Database interoperability: It’s pretty rare that companies use only a single type of database and even critical business systems are often built on several different types of databases. Usually the data from those different databases is combined in an upper application level. MariaDB introduces the possibility of doing this at a low level inside the MariaDB database. The first implementation of this is integration with Cassandra. With Dynamic Columns and the Cassandra Storage Engine you can now combine data residing in Cassandra with data inside MariaDB and this is done through normal looking queries on the MariaDB side.
      • Data interchange: JSON has become a very popular standard for data interchange. In Dynamic Columns one can now request a row in JSON format.
  • Per thread memory usage (MDEV-4011)
    • Based on a patch by Taobao, INFORMATION_SCHEMA and SHOW STATUS enables the analysis of thread specific memory usage
  • Faster ALTER TABLE with UNIQUE key (MDEV-539)
    • Significant speed up of ALTER TABLE with unique keys (for Aria and MyISAM storage engines)

MariaDB 10.0 Merged Features

Features listed in this category have been directly merged from MySQL 5.6.

Already available since MariaDB 10.0.0
  • InnoDB and Performance Schema
    • Most InnoDB enhancements, but some, for example InnoDB’s fulltext capabilities, will come in an upcoming version of 10.0.
      MySQL Manual: InnoDB.
    • The full new performance schema with all the new event filtering, instrumentation, and other goodies.
      MySQL Manual: Performance Schema
  • ORDER BY … LIMIT -optimization
    • A useful optimization for showing only a few rows of a bigger resultset.
      MySQL Manual:Limit Optimization
Now added in 10.0.1
  • Plugin-load-add (MDEV-3860)
    • Used to avoid specifying a large set of plugins in a single long argument

MariaDB 10.0 Reimplemented Features

These features are re-implementations of the corresponding functionality in MySQL 5.6. In future versions of MariaDB 10.0 there will be a few more features in this category. I’ll cover them in a future blog post.

In 10.0.1
  • Add full support for auto-initialized/updated timestamp and datetime

MariaDB 5.x Features now in MySQL 5.6

Earlier MariaDB 5.x versions included features that have now been introduced in MySQL 5.6. It should be noted that the corresponding features in MySQL 5.6 haven’t been merged from MariaDB. Oracle has re-implemented them.

MariaDB 5.x Features Backported from MySQL 5.6

These features were merged from MySQL 5.6’s development trees to MariaDB, where they were then hardened for production use.

  • Binlog checksums, were introduced in MariaDB 5.3. It is backport of the corresponding feature in MySQL 5.6.

As you can see above there are quite many features in MariaDB 10.0 already, but more is coming. Stay tuned for an update on features going into MariaDB 10.0.2.

Infor announced this week, that they will provide open source database alternatives to some of their products. MariaDB has been chosen, tested, and certified by Infor to be the open source database of choice (together with MySQL) for the Infor LN and ION products. Infor LN is Infor’s flagship ERP and is sometimes better known by its former name, Baan. It has 25 years of manufacturing know-how built into it and is used by more than 5,000 companies worldwide in a wide range of industries. These include automotive, industrial equipment and machinery, high tech and electronics, and aerospace and defense. This is a big stamp of approval that even the most critical systems can be run on MariaDB.

In other news, there are currently several really interesting paths coming together into some important milestones. The rest of this post will be about them and I hope you are as excited about them as we are and please do let us know what you think, as always.

MariaDB 10.0

First up, MariaDB 10.0. In my late spring blog post about the next version of MariaDB, we informed you that the next version will be called MariaDB 10.0. There was a little storm of feedback on this and most of the feedback was related to how different tools will react with this versioning change. We’re still looking into this, but it’s good to remember that MariaDB includes features and functionality that aren’t in MySQL and that it would be good for tools to handle the MariaDB version string separately to make use of the advantages of MariaDB, like extended statistics and more switches compared to MySQL. Currently we are just a few days away from releasing the Alpha version of MariaDB 10.0 and I would like to make particular mention of two features:

  • Multi-source replication, which is a longtime wish of many users. In scenarios where you partition your data over many masters you can then replicate the data from all masters onto one slave. This is very useful for analytical queries towards the whole data or for backing up all data.
  • Get the query plan of a running statement (SHOW EXPLAIN). In MySQL and MariaDB up until now a query plan printout (EXPLAIN) wasn’t always correct because the actual running query wasn’t studied, which is the case now with SHOW EXPLAIN.

To get more details on what MariaDB 10.0 includes, please read Monty’s blog post. The Alpha version of MariaDB 10.0 is about to be released. Stay tuned!

Cassandra, JSON and Dynamic Columns

For those of you keeping score, one and a half years ago Dynamic Columns was introduced into MariaDB. This feature allows you to store a different set of columns for every row in a table. In that manner Dynamic Columns can be called NoSQL-like.

Whether or not the first intention of introducing Dynamic Columns was to become the foundation for data interchange, it definitely has. Since we introduced Dynamic Columns we have received user input, and have researched how to make it better and the end result is that Dynamic Columns now has some new capabilities:

  • Database interoperability: It’s pretty rare that companies use only a single type of databases and even critical business systems are often built on several different types of databases. Usually the data residing in those different databases are combined in an upper application level. MariaDB introduces the possibility to do this at a low level inside the MariaDB database. The first implementation of this is integration with Cassandra. Yes, you can now combine data residing in Cassandra with data inside MariaDB and all this is done through normal looking queries on the MariaDB side.
  • Data interchange: JSON has become a very popular standard for data interchange. In Dynamic Columns one can now request a row in JSON format.

The feature preview release of the Dynamic Columns with the above features included will be made available today and all of this will naturally become part of MariaDB 10.0, currently scheduled for the version 10.0.1.

MariaDB Galera Cluster

Next, you may recall that at the beginning of the month we introduced MariaDB Galera Cluster. This Alpha version has been out now for about three weeks and we’ve been testing and fixing it to prepare for the next development release. To be honest, most end user problems have been related to packaging and running the product on a specific platform. The final steps of finalizing, and preparing for, the Beta version are currently being taken.

Be part of the MariaDB project

Another push we’re making at this time is to actively extend involvement in MariaDB. Every new installation of MariaDB of course counts to this, but what I’m actually referring to is that we want to involve more companies and individuals in the MariaDB project. This doesn’t necessarily mean digging into the MariaDB source code. That is always welcome, of course. But another very important way to help the project is to sponsor specific work in MariaDB or make general financial contributions.

Patrik Sallner, CEO of SkySQL, said yesterday in his blog post about the launch of their new SkySQL products and offerings for MariaDB and MySQL, that there are a lot of businesses out there having really critical workloads running on MySQL and MariaDB. If you happen to represent one of these businesses, please consider the possibility of being part of planning the future of the product your critical business is run on. Please contact me through Monty Program for further information.

A personal task and wish

Lastly, we try to be as open as possible inside the MariaDB team in regards to the MariaDB project and I think we have succeeded fairly well. We are definitely continuing on that path. However there are always things we can do to improve, and one of them that I personally think is important for both MySQL and MariaDB is evolution predictability. Users want to know in which direction the product is going and to have a roadmap that clearly tells what’s going to be in the next version and what is planned for future versions after that. I will work on the MariaDB side to create a longer-term roadmap with as many details as possible and I do hope we’ll see something similar from the Oracle MySQL team.