What is MariaDB 5.3
The focus for MariaDB 5.3 is to improve the optimizer, especially for subqueries and complex/big joins.
MariaDB 5.3 is based on MariaDB 5.2 and thus on MariaDB 5.1 and MySQL 5.1.
Some of the code is backported from MySQL 6.0 (a MySQL version that was never released as GA by Oracle) and improved. Other code is written from scratch.
This is the biggest redesign of the MariaDB optimizer in 10 years and it will finally make all subqueries usable in MariaDB.
The plan is to have a beta version (feature complete) of MariaDB 5.3 in July or August 2011. Until then you can get the source code from launchpad.
Contents
Query optimizer
Subquery optimizations
- Semi-join subquery optimizations
- Subquery Cache
- NULL-aware materialization strategies (partial matching for materialized subqueries, MWL#68)
- Cost-based choice between Materialization and IN->EXISTS.
Optimizations for derived tables and views
- No early materialization of derived tables (subqueries in FROM clause) and materialized views (EXPLAIN is always instantaneous)
- Mergeable derived tables are merged like mergeable views
- Optimizer can create keys to access derived tables and views materialized in temporary tables
- Fields of mergeable views and derived tables are involved now in all optimizations employing equalities
Disk access optimization
- Index Condition Pushdown
- Multi-Range-Read optimization (backport from MySQL 6.0)
- Key-ordered retrieval (new development)
Big join optimizations
- Batched Key Access (backport from MySQL 6.0)
- (TODO any new development here? There was something, ask Igor)
- Hash join
Index Merge improvements
- Correct optimization of index_merge vs range access: Fair choice between range and index_merge optimizations
- index_merge/sort_intersection strategy
Optimizer control
- @@optimizer_switch variable can be used to turn on/off all new optimizations.
NoSQL-style interfaces
- HandlerSocket plugin included.
- Faster HANDLER commands; HANDLER READ now also work with prepared statements.
Replication and binary logging
- Group commit for the binary log — MariaDB 5.3 implements group commit which works when using XtraDB with the binary log enabled. (In previous MariaDB releases, and all MySQL releases at the time of writing, group commit works in InnoDB/XtraDB when the binary log is disabled, but stops working when the binary log is enabled).
- Annotation of row-based replication events with the original SQL statement — When using row-based replication, the binary log does not contain SQL statements, only discrete single-row insert/update/delete events. This can make it harder to read mysqlbinlog output and understand where in an application a given event may have originated, complicating analysis and debugging.This feature adds an option to include the original SQL statement as a comment in the binary log (and shown in mysqlbinlog output) for row-based replication events.
- Checksums for binlog events. This is a backport of the same feature in MySQL 5.6. It was implemented in MWL#180.
- Enhancements for START TRANSACTION WITH CONSISTENT SNAPSHOT —
In MariaDB 5.3,
START TRANSACTION WITH CONSISTENT SNAPSHOT
now also works with the binary log. This means it is possible to obtain the binlog position corresponding to a transactional snapshot of the database without blocking any other queries. This is used by the command "mysqldump
--
single-transaction
" to do a fully non-blocking backup which can be used to provision a new slave. "--
master-dataSTART
TRANSACTION
WITH
CONSISTENT
SNAPSHOT
" now also works consistently between transactions involving more than one storage engine (currently XTraDB and PBXT support this). - Row-based replication for tables with no primary key —
This feature can improve the performance of row-based replication on tables
that do not have a primary key (or other unique key), but which do have
another index that can help locate rows to update or delete. With this
feature, index cardinality information from
ANALYZE TABLE
is considered when selecting the index to use (before this feature is implemented, the first index was selected unconditionally). - mysqlbinlog will now omit redundant
use
statements aroundBEGIN
,SAVEPOINT
,COMMIT
, andROLLBACK
events when reading MySQL 5.0 binlogs.
Datatypes
- Dynamic Columns support.
- Microsecond support for NOW() and timestamp, time and datetime columns.
- CAST() now supports AS DECIMAL[(M,D)] and AS INT.
- CAST() and all other datetime/time functions now supports microsecond fully.
Windows performance improvements
- Backported Windows performance patches from MySQL5.5
- Asynchronous IO in XtraDB is redesigned and is now faster, due to the use of IO completion ports.
- Additional durability option for XtraDB : innodb_flush_method can now be O_DSYNC, like on Unixes. The effect of using this option is that log file is opened with FILE_FLAG_WRITETHROUGH, and FlushFileBuffers() is not done. This may improve speed in write-heavy scenarios.
Miscellaneous
- New status variables:
Rows_tmp_read
,Handler_tmp_write
, andHandler_tmp_update
which count what happens with internal temporary tables.Rows_read
,Handler_write
andHandler_update
no longer count operations on internal temporary tables. - New variable 'in_transaction' that is 1 if you are in a transaction, 0 otherwise.
- Progress reports for
ALTER TABLE
andLOAD DATA INFILE
. In addition Aria tables gives progress reports forREPAIR TABLE
andCHECK TABLE
. The progress can be seen inSHOW PROCESSLIST
,INFORMATION_SCHEMA.PROCESSLIST
and is sent to MariaDB clients that callsmysql_real_connect()
with the newCLIENT_PROGRESS
flag.mysql
command line client supports the new progress indications. - PBXT consistent commit ordering —
This feature implements the new commit ordering storage engine API in PBXT.
With this feature, it is possible to use
"
START TRANSACTION WITH CONSISTENT SNAPSHOT
" and get consistency among transactions which involve both XtraDB and InnoDB. (Without this feature, there is no such consistency guarantee. For example, even after running "START TRANSACTION WITH CONSISTENT SNAPSHOT
" it was still possible for the InnoDB/XtraDB part of some transaction T to be visible and the PBXT part of the same transaction T to not be visible.) - MariaDB unique error numbers now start from
1900
to not clash with MySQL error numbers. - A MariaDB optimized version of mytop is included in the MariaDB distribution.
For a more specific list and for things that are still planned, see the MariaDB 5.3 TODO page.
You can access the MariaDB 5.3 tree from launchpad.
Documentation is being worked on at mariadb-53-documentation