① 支持48核的CPU,而5.5支持24核的CPU
②
内存热数据持久化,我们知道当系统重启或者mysql进程重启后,Innodb的内存池里面的热数据全部清空,需要重新把磁盘的数据缓存进来,然后根据
LRU最近最少使用原则,把热数据保持在内存里,冷数据踢出到磁盘里。这个过程是缓慢的。5.6里改进了这一点,会自动把内存的热数据导出到磁盘里,这样
mysql重启后,会立即从磁盘里导入Innodb内存池,减少了与磁盘IO的交互。
③
在线DDL功能。5.5版本里,修改表结构会导致锁表,例如用户进件会卡住,假如表很大,锁的时间就会越长。所以在5.6版本里,解决了这一问题,DBA
在修改表结构的同时,用户进件,Innodb内部row_log记录了ddl变更过程中新产生的dml操作,并在ddl执行的最后将其应用到新的表中,保
证数据完整性。
④
多线程复制(利用组提交方式实现),5.5版本里是单进程串行复制,通过sql_thread线程来恢复主库推送过来的binlog,这样会产生一个问
题,主库上大量的写操作,从库就有可能会出现延迟。在MariaDB
10通过多线程复制技术,如果主库上1秒内有10个事务,那么合并一个IO提交一次,并在binlog里增加一个cid = XX
标记,当cid的值是一样的话,就可以进行并行复制,通过设置多个sql_thread线程实现。
⑤ 半同步复制技术。默认是异步复制技术,主库提交了事务立即返回给客户端,而半同步复制技术是,主库提交了事务以后,要确保至少一个从库收到了binlog,才把请求反馈给客户端,这样就大大保障了数据安全。
⑥
从库安全崩溃恢复。DBA经常会遇到1032(更新/删除数据找不到)和1062错误(主键冲突),这就是因为从库宕机后,relay-log是以文件形
式写盘,没有事务的概念。原理:从库执行了binlog的恢复,会刷盘relay-log,假如在刷盘那一刻宕机,relay-log里没有记录,那么从
库重启mysql进程后,就会执行两遍同样的SQL,造成同步复制报错。5.6是把relay-log记录一张innodb表里,当事务恢复完,首先更新
relay-log表,更新成功后再commit提交事务。
⑦ 对开发来说是一件喜事。很多开发喜欢子查询,好处:直观、容易实现业务SQL,但在5.5是个噩梦,性能极差,在5.6里解决了这一问题,通过优化器自动把子查询转化为join关联的SQL查询语句,对开发来说完全是透明的。
⑧ MariaDB 10提供了审计日志功能。
⑨ MariaDB 10提供了数据库级的连接池。我们知道PHP是短连接,没有连接池,在高并发环境下,很容易把数据打死。而JAVA的框架有很多优秀的连接池,就如同我们用的阿里的druid、c3p0等。
⑩ MariaDB 10支持动态列,也就是说,可以存JSON对象,可以像mongodb一样实现JSON的读取和存储。
附上基准测试图: