Posts tagged ‘group commit’

MariaDB 新特性介绍-group commit

如果你的业务场景要求非常高,不能丢任何数据,就需要设置innodb_flush_logs_at_trx_commit=1和sync_binlog=1。并发度陡降!MariaDB利用它的新特性:group commit,把多个fsync操作合并起来,提高系统并发度,解决了这个问题。

group commit在并发非常大的时候特别有用。如果你的系统对一致性(“durability”, the “D” in ACID)要求特别高。那么你为了尽量少的丢数据,会设置innodb_flush_logs_at_trx_commit=1和sync_binlog=1。否则就有可能在主机crash时产生事务丢失或者造成主备数据不一致。

这样的话fsync()或者fdatasync()的系统调用就会非常多,系统的并发度急剧下降。因为你在每次commit的时候都需要刷transaction log和binary log。而fsync()可以理解为刷盘的操作,强制将内存中的数据同步到磁盘上去。MySQL和操作系统做了非常多的缓存,就是为了能够缓解数据库对底层磁盘的IO次数,而这两个参数设置为1无疑让这些缓存都成了泡影。MySQL的吞吐量和QPS将急剧下降,相关的测试非常多,性能损失也非常大。 MariaDB有一个简单的解决的办法:如果10个事务并发,基本上同时提交commit;那么就把这些fsync()合到一起做,而不是每个事务排队一个一个的做,达到的目的也是一样的——把缓存的数据刷到磁盘上去。当然,在分时的操作系统上,没有同时的概念,那么实现机制就是,当第一个fsync()还没有完成的时候,查看一下排队的,需要做fsync()的操作,把他们全部合并到一起,脏的数据一块儿刷到磁盘上去。一次fsync完成了所有排队fsync()的需求。这样的话,大大提高了并发的效率。

group commit在MariaDB里面是默认开启的。并且可以通过binlog_commits 和 binlog_group_commits 两个状态值来确定group commit对fsync()调用减少的效果。 具体信息可以参考:http://kb.askmonty.org/en/group-commit-for-the-binary-log/

MariaDB新特性简介

随着Oracle计划把MySQL搞成闭源的声音越来越多,对MySQL何去何从的讨论也越来越多。由于MySQL是遵循GPL协议的,那么Oracle需要分发、传播和发布的时候就必须要开源。但是如果Oracle一定要把MySQL变得封闭起来,它也不是没有办法,比如:逐渐把开源社区里不亲近oracle的清理出去;或者让MySQL必须依赖的一些oracle闭源的软件和功能,使得MySQL不配合这些功能就变得非常难以使用等。最近,MySQL的新版本里面就去掉了对bug修复后进行验证的测试用例;这样,社区的人就无法保证自己以后发布的版本,在下一个版本里不会出现之前用户之前report过的bug。

商业毕竟是商业,Sun花了10亿美元收购MySQL,然后Oracle花了74亿美元收购Sun,这些钱都是白花花的银子。Larry. Ellison,Oracle的CEO,曾经明确表示不会放弃MySQL,换言之,也就是说,不会放过MySQL这块蛋糕。因为Oracle是按照CPU核数来计算licence的,这个不能改变,也无法改变。这也限制了Oracle在分布式领域的发展,而MySQL在分布式领域的贡献有目共睹。据小道消息,Oracle已经把它的一部分核心源码开放给了MySQL的部分核心开发人员,以促进MySQL 5.6进一步的稳定和扩大影响力。我们不知道Oracle有什么样的商业企图,但是,你如果认为MySQL会一直这样白白给你使用的话,那么Larry. Ellison就是一个傻子。

Larry. Ellison不是傻子,所以后来涌现了MySQL的很多分支,包括MariaDB,Drizzle,goole,facebook,阿里集团等维护的自己的分支版本。除了MariaDB,Drizzle以外,这些分支版本都是各个商业公司为了满足各自公司的需求而对源码进行修改和调整的版本,适合不适合你的业务场景我无从分辨。Drizzle是2008年从MySQL 6.0分支出来的,并且它明确申明了,部分MySQL的蹩脚(Gotchas)特性,它都不会保留,也就是说它和MySQL是不完全兼容的。

MySQL前CTO,被称为MySQL之父的Michael “Monty” Widenius在2009年2月,创办了Monty Program AB,并建立了mariaDB这个MySQL高性能的分支。MariaDB是发展最快的MySQL分支版本,与MySQL兼容并且有很多新的功能。

MariaDB有个很性感的中文名玛莉亚DB,对宅男型的DBA来说,终于有一个女性DB陪伴了。下面就让我们来看看这些功能到底有哪些。   (MariaDB目前有时候会被墙,不过沃趣科技已经搭建好了镜像(mariadb.woqutech.com),将部分文档和资料搬到国内的服务器上来,以解各位技术男的相思之苦。)

MariaDB5.5有,而MySQL5.6没有的功能包括:

简单列表如下:

High Performance Developers DBAs NoSQL
Thread pool Microsecond precision & type Segmented MyISAM keycache HandleSocket
Group commit in the binary log SphinxSE for full-text search Authentication plugins – PAM, Active Directory Dynamic columns
Non-blocking client library Subqueries materialize LIMIT ROWS EXAMINED
GIS functionality Progress reporting

后面我们会详细分析一下这些新特性。