MariaDB 11.4 是最新的长期支持版本(LTS)。第一个可用版本是 11.4.2,于 2024 年 5 月 29 日发布,该分支将一直支持到 2029 年 5 月 29 日。上一个 LTS 分支是 10.11,它将支持到 2028 年 2 月 16 日。
11.4 分支包括近期短期支持版本引入的增强功能:11.0、11.1、11.2、11.3,以及之前未发布的新增强功能。
以下罗列出关键新特性
一、在线DDL变更
在早期的MariaDB版本中,当一个会话正在执行ALTER TABLE MODIFY等DDL语句修改表结构时,其他会话的DML操作如UPDATE、INSERT等将被阻塞,需要等待DDL语句执行完成后才能继续。但是,在现代版本的MariaDB中,这种情况已得到改善。
举个例子:
会话一执行,alter table sbtest1 modify pad varchar(200);
会话二执行,update sbtest1 set pad='nba' where id=10000000;
在之前的版本,会话二会被阻塞。而在新版本里,会话二的UPDATE操作不会被阻塞,可以同步执行,不必等待会话一的DDL语句完成。这个改进大大提高了MariaDB的并发能力,避免了不必要的等待,提升了数据库的整体性能。
二、InnoDB 系统表空间会在启动时通过回收未使用的空间进行缩减
InnoDB 的一个历史问题是,即使删除了系统表空间数据,磁盘空间也不会被回收。因此,如果你有一个长达数小时的疯狂事务,你可能会看到你的 ibdata* 文件显著增长,而你却永远无法缩小它们。幸运的是,现在未使用的空间会在 MariaDB 启动时被释放。
三、单表UPDATE或DELETE语句,支持半连接查询优化
子查询一直以来以性能差而著称,解决方案是用join关联查询代替子查询。在之前的版本,半连接优化仅是针对select操作进行的,可以在不改变原有SQL的情况下,通过内部的优化器,把子查询改写为join关联查询。至于update或delete操作,它们的性能仍旧很差。而在最新的版本里,单表UPDATE或DELETE语句,支持半连接查询优化。
例:explain update t1 set name='aa' where id in (select id from t2 );
四、使用 DATE 或 YEAR 函数与常数进行比较的查询现在可以使用索引
例:select create_time from t_doc where YEAR(create_time)=2015;
select create_time from t_doc where date(create_time)='2015-01-01';
以上两个SQL,可以使用上create_time索引
五、限制二进制日志文件使用的磁盘空间
担心MariaDB文件增长速度过快而撑爆磁盘空间?那么需要了解一下max_binlog_total_size参数(限制二进制日志文件使用的磁盘空间),该变量对所有二进制日志的总大小(以字节为单位)设置了上限。当达到限制时,最旧的二进制日志将被清除,直到总大小低于限制或仅保留活动日志。默认值0禁用该功能。日志空间没有限制。二进制日志会无限累积,直到磁盘空间已满。(该实现基于 Percona 的补丁)
六、FULL_NODUP是binlog_row_image系统变量的新值
它的工作原理与 FULL 类似,即所有列都包含在事件中,但占用的空间更少,IO 更少。因为省略了未被 UPDATE 语句更改的列值,但是开源闪回工具,如reverse_sql不支持它。(这是阿里巴巴的贡献)
七、ALTER TABLE IMPORT 现在更容易使用了。
在移动表空间时,不再需要运行 CREATE TABLE 和 ALTER TABLE DISCARD TABLESPACE 语句。例:
FLUSH TABLES t1 FOR EXPORT; |
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_DATADIR/test/t2.cfg |
--copy_file $MYSQLD_DATADIR/test/t1.frm $MYSQLD_DATADIR/test/t2.frm |
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_DATADIR/test/t2.ibd |
UNLOCK TABLES; |
ALTER TABLE t2 IMPORT TABLESPACE; |
以前,必须执行 CREATE TABLE 和 ALTER TABLE...DISCARD TABLESPACE,而且不能重复使用现有 .frm 文件中的准确表定义。现在直接ALTER ... IMPORT即可。
八、mariadb-dump 现在支持多线程并行备份,类似于mydumper
使用方法
Shell> mariadb-dump -S /tmp/mysql_mariadb.sock -uroot -p123456
--compact --skip-ssl --single-transaction
--master-data=2 --routines --triggers --events test
-T /data/bak/ -j 12
--log-error=dump.txt > metedata.txt
注:导出的数据格式为CSV,仅支持本地、单库并行执行。
-T参数,指定存放备份数据目录
-j参数,指定并发线程数,这里为12